C# EF Core-如何根据使用的数据库提供程序配置列类型
每个数据库提供程序都有不同的数据类型,这些数据类型将映射到相同的C#类型(Guid/DateTime) 我想根据使用的数据库提供程序配置列类型 例如: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
public class MyClass
{
public Guid Id { get; set; }
public DateTime CreatedOn { get; set; }
}
如果使用Sql Server
- 将
配置为DateTime
datetime2(0)
- 将
配置为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()
。