Entity framework core EF Core 2.0特定于供应商的型号配置

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(

我正在尝试将EFCore1.x项目升级到2.0。在1.x中,我利用了特定于提供程序的扩展方法(例如,QLServerHasDefaultValueSQL的
扩展方法
/
扩展方法
扩展方法
扩展方法),但这些扩展方法似乎已在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");