Entity Framework核心:通用机型配置
Entity Framework Core: General model configuration
在 EF Core 中配置我的模型映射时,我想设置一些通用映射规则,例如。告诉每个 class 有 Id
属性 这个 属性 被映射到数据库列 ID
。
使用 Entity Framework,我能够使用以下代码实现此目的:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Types<IEntity<long>>().Configure(c =>
{
c.Property(x => x.Id).HasColumnName("ID");
});
}
(IEntity<long>
是一个简单的接口,只有一个 属性 long Id { get; set; }
。我模型中的每个实体 class 都简单地实现了这个接口。)
Entity Framework Core 2.2+ 是否也有类似的东西?
最后,我得到了这个解决方案:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (IMutableEntityType mutableEntityType in modelBuilder.Model.GetEntityTypes())
{
bool isEntity = mutableEntityType.ClrType.GetInterface($"{nameof(IEntity<int>)}`1") != null;
if (isEntity)
{
modelBuilder.Entity(mutableEntityType.ClrType).Property(nameof(IEntity<int>.Id)).HasColumnName("ID");
}
}
}
在 EF Core 中配置我的模型映射时,我想设置一些通用映射规则,例如。告诉每个 class 有 Id
属性 这个 属性 被映射到数据库列 ID
。
使用 Entity Framework,我能够使用以下代码实现此目的:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Types<IEntity<long>>().Configure(c =>
{
c.Property(x => x.Id).HasColumnName("ID");
});
}
(IEntity<long>
是一个简单的接口,只有一个 属性 long Id { get; set; }
。我模型中的每个实体 class 都简单地实现了这个接口。)
Entity Framework Core 2.2+ 是否也有类似的东西?
最后,我得到了这个解决方案:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (IMutableEntityType mutableEntityType in modelBuilder.Model.GetEntityTypes())
{
bool isEntity = mutableEntityType.ClrType.GetInterface($"{nameof(IEntity<int>)}`1") != null;
if (isEntity)
{
modelBuilder.Entity(mutableEntityType.ClrType).Property(nameof(IEntity<int>.Id)).HasColumnName("ID");
}
}
}