gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:50:56 26 4
gpt4 key购买 nike

每个数据库提供程序都有不同的数据类型,可以映射到相同的 C# 类型(Guid/DateTime)
我想根据使用的数据库提供程序配置列类型。
例如:

public class MyClass
{
public Guid Id { get; set; }
public DateTime CreatedOn { get; set; }
}
如果使用 Sql Server
  • DateTime 配置为 datetime2(0)

  • 如果使用 MySql Server
  • 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)")
    ;
    }
    }
    在 EF Core 中可以这样做吗? (撰写本文时最新稳定版 3.1)

    最佳答案

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

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

    关于c# - EF Core - 如何根据使用的数据库提供程序配置列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62916893/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com