EF Core 迁移脚本和数据库相关
migrationBuilder.CreateTable(
name: "T_Persons",
columns: table => new
{
Id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(max)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_T_Persons", x => x.Id);
});
迁移脚本不能跨数据库。通过给Add-migration命令添加“-OutputDir”参数的形式在同一个项目中为不同的数据库生成不同的迁移脚本。
同一段代码在不同数据库差生的SQL差异
1、运行代码:
using (MyDBContext dBContext=new MyDBContext())
{
var persons=dBContext.Persons.Where(b => b.BirthDay.Year == 2008).Take(3);
foreach (var person in persons)
{
Console.WriteLine(person.Name);
}
}
EF Core对应SQLServer数据库生成的SQL脚本:
SELECT TOP(@__p_0) [t].[Id], [t].[BirthDay], [t].[Height], [t].[Name], [t].[Width]
FROM [T_Persons] AS [t]
WHERE DATEPART(year, [t].[BirthDay]) = 2008
EF Core对应MySQL数据库生成的SQL脚本:
1、EF Provider的选择:
MySql.EntityFrameworkCore | Pomelo.EntityFrameworkCore.MySql | |
---|---|---|
开发者 | MySQL官方 | 开源社区开发者 |
是否开源 | 否 | 是 |
活跃度 | 近期活跃 | 一直活跃 |
下载量 | 86333 | 12081234 |
2、Install-Package Pomelo.EntityFrameworkCore.MySql (注意对应版本,可在Nuget搜索擦看)。
3、optionsBuilder.UseMySql(“server=localhost;user=root;password=root;database=xxx”,new MySqlServerVersion(new Version(8.4.4)));
SELECT `t`.`Id`, `t`.`BirthDay`, `t`.`Height`, `t`.`Name`, `t`.`Width`
FROM `T_Persons` AS `t`
WHERE EXTRACT(year FROM `t`.`BirthDay`) = 2008
LIMIT @__p_0