Entity Framework 6 amp; TPH inheritance: Map properties with the same name to same column by default(实体框架 6 amp;TPH继承:默认将同名属性映射到同一列)
问题描述
从 EF6 开始,可以在使用 Table Per Hierarchy 继承配置实体映射时执行以下操作:
As of EF6 it is possible to do something like this when configuring Entity mappings using Table Per Hierarchy inheritance:
public class MyContext : DbContext
{
public DbSet<Device> Devices { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ABatteryPoweredDevice>().Property(c => c.BatteryLevel).HasColumnName("BatteryLevel");
modelBuilder.Entity<ADifferentBatteryPoweredDevice>().Property(c => c.BatteryLevel).HasColumnName("BatteryLevel");
}
}
BatteryLevel
不是 Device
基类的一部分 - 它是实现接口契约的派生类的属性.
BatteryLevel
is not part of the Device
base class- it is a property of the derived classes implemented to fulfill an interface contract.
是否可以将此设置为默认行为,而不必为每个派生类添加新映射?
Is it possible to make this the default behavior as opposed to having to add a new mapping for each derived class?
推荐答案
使用 自定义代码优先约定,从 EF6 开始提供,来解决这个问题:
Used Custom Code First Conventions, which are available from EF6 onwards, to sort this out:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//your code before
modelBuilder.Properties().Configure(prop => prop.HasColumnName(prop.ClrPropertyInfo.Name));
//your code after
}
这会将不同派生类型中具有相同名称的属性映射到同一个表列,而无需像问题中提到的那样显式调用.
This maps properties with the same name in different derived types to the same table column without explicit calls like those mentioned in the question.
这篇关于实体框架 6 &TPH继承:默认将同名属性映射到同一列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:实体框架 6 &TPH继承:默认将同名属性映射到同一列


基础教程推荐
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01