Entity framework core EF Core 2.0特定于供应商的型号配置
我正在尝试将EFCore1.x项目升级到2.0。在1.x中,我利用了特定于提供程序的扩展方法(例如,QLServerHasDefaultValueSQL的Entity framework core EF Core 2.0特定于供应商的型号配置,entity-framework-core,ef-model-builder,Entity Framework Core,Ef Model Builder,我正在尝试将EFCore1.x项目升级到2.0。在1.x中,我利用了特定于提供程序的扩展方法(例如,QLServerHasDefaultValueSQL的扩展方法/扩展方法或扩展方法扩展方法),但这些扩展方法似乎已在2.0中删除 由于每个提供程序都有自己的SQL风格和功能,因此我需要能够在OnModelCreating中为每个提供程序使用稍微不同的设置或SQL字符串。例如,要设置默认值,我可能有: modelBuilder<Foo>(b => { b.Property(
扩展方法
/扩展方法
或扩展方法
扩展方法),但这些扩展方法似乎已在2.0中删除
由于每个提供程序都有自己的SQL风格和功能,因此我需要能够在OnModelCreating
中为每个提供程序使用稍微不同的设置或SQL字符串。例如,要设置默认值,我可能有:
modelBuilder<Foo>(b =>
{
b.Property(x => x.CreateDate)
.IsRequired()
.ForSqlServerHasDefaultValueSql("getutcdate()")
.ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");
}
modelBuilder(b=>
{
b、 属性(x=>x.CreateDate)
.IsRequired()
.ForSqlServerHasDefaultValueSql(“getutcdate()”)
.ForSqliteHasDefaultValueSql(“当前时间戳”);
}
在2.0中是如何做到这一点的?我在文档中找不到任何东西(目前),但深入挖掘源代码,在以下日志中有一条注释: 删除关系概念的ForSqlServer…ForSqlite…方法 #7166的一部分 代码可以使用
if (Database.IsSqlServer())
{
modelBuilder.HasColumnName("MySqlServerName");
}
因此,问题中的片段将转换为:
modelBuilder<Foo>(b =>
{
b.Property(x => x.CreateDate)
.IsRequired();
if (Database.IsSqlServer())
b.Property(x => x.CreateDate).HasDefaultValueSql("getutcdate()");
if (Database.IsSqlite())
b.Property(x => x.CreateDate).HasDefaultValueSql("CURRENT_TIMESTAMP");
}
这里有一个链接,指向@IvanStoev的(某种)文档-EF核心关系元数据API更改主题,我希望这个页面会存在。谢谢!
modelBuilder.Entity<User>().ToTable(
Database.IsSqlServer() ? "SqlServerName" : "OtherName");