C# EF Core-如何根据使用的数据库提供程序配置列类型

C# EF Core-如何根据使用的数据库提供程序配置列类型,c#,entity-framework-core,C#,Entity Framework Core,每个数据库提供程序都有不同的数据类型,这些数据类型将映射到相同的C#类型(Guid/DateTime) 我想根据使用的数据库提供程序配置列类型 例如: public class MyClass { public Guid Id { get; set; } public DateTime CreatedOn { get; set; } } 如果使用Sql Server 将DateTime配置为datetime2(0) 如果使用MySql服务器 将DateTime配置为TIM

每个数据库提供程序都有不同的数据类型,这些数据类型将映射到相同的C#类型(Guid/DateTime)

我想根据使用的数据库提供程序配置列类型

例如:

public class MyClass
{
    public Guid Id { get; set; }
    public DateTime CreatedOn { get; set; }
}
如果使用Sql Server

  • DateTime
    配置为
    datetime2(0)
如果使用MySql服务器

  • DateTime
    配置为
    TIMESTAMP
  • Guid
    配置为
    CHAR(36)
因此,我正在寻找类似以下的代码:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    if(IsSqlServer)
    {
        modelBuilder.Entity<MyClass>()
            .Property(e => e.CreatedOn)
            .HasColumnType("datetime2(0)")
            ;
    }
    else if(IsMySqlServer) 
    {
        modelBuilder.Entity<MyClass>()
            .Property(e => e.CreatedOn)
            .HasColumnType("TIMESTAMP")
            ;

        modelBuilder.Entity<MyClass>()
            .Property(e => e.Id)
            .HasColumnType("CHAR(36)")
            ;
    }
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
如果(IsSqlServer)
{
modelBuilder.Entity()
.Property(e=>e.CreatedOn)
.HasColumnType(“日期时间2(0)”)
;
}
else if(IsMySqlServer)
{
modelBuilder.Entity()
.Property(e=>e.CreatedOn)
.HasColumnType(“时间戳”)
;
modelBuilder.Entity()
.Property(e=>e.Id)
.HasColumnType(“CHAR(36)”)
;
}
}

是否可以在EF Core中执行此操作?(撰写本文时最新的稳定版本3.1)

在DbContext中,您可以使用
this.Database.ProviderName

if(this.Database.ProviderName==“Microsoft.EntityFrameworkCore.SqlServer”)
{
modelBuilder.Entity()
.Property(e=>e.CreatedOn)
.HasColumnType(“日期时间2(0)”)
;
}

通常更容易使用sugar方法,例如
Database.IsSqlServer()