每个数据库提供商都有不同的数据类型,这些类型会映射到相同的C#类型(Guid / DateTime)。
我希望根据使用的数据库提供商配置列类型。
例如:
如果使用的是 Sql Server
我希望根据使用的数据库提供商配置列类型。
例如:
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)")
;
}
}
最新稳定版本的EF Core(3.1)能否实现这一点?
Database.IsSqlServer()
这样的简化方法。https://github.com/dotnet/efcore/blob/3bd012b6dc645f6d4e14ddb473c42f3fa4e0b98b/src/EFCore/Infrastructure/DatabaseFacade.cs#L310-L312 - altsoIEntityTypeConfiguration<ModelType>
类中时怎么样? - Majid