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

Nev*_*ver 4 c# entity-framework-core

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

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

例如:

public class MyClass
{
    public Guid Id { get; set; }
    public DateTime CreatedOn { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果使用 Sql Server

  • 配置DateTimedatetime2(0)

如果使用 MySql Server

  • 配置DateTimeTIMESTAMP
  • 配置GuidCHAR(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)")
            ;
    }
}
Run Code Online (Sandbox Code Playgroud)

在 EF Core 中可以这样做吗?(撰写本文时最新稳定版 3.1)

ESG*_*ESG 5

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

if (this.Database.ProviderName == "Microsoft.EntityFrameworkCore.SqlServer")
{
    modelBuilder.Entity<MyClass>()
        .Property(e => e.CreatedOn)
        .HasColumnType("datetime2(0)")
        ;
}
Run Code Online (Sandbox Code Playgroud)