c# – 实体框架:将多个类映射到一个表
发布时间:2020-12-15 08:21:18 所属栏目:百科 来源:网络整理
导读:我认为这在nhiberate中是可能的,但我的问题是关于实体框架. 在我的数据库模型中 – 我无法修改 – 我有冗余列,我想存储在不同的类中. 示例: public class DateParams{ public DateTime CreationDate { get; set; } public DateTime ModificationDate { get;
我认为这在nhiberate中是可能的,但我的问题是关于实体框架.
在我的数据库模型中 – 我无法修改 – 我有冗余列,我想存储在不同的类中. 示例: public class DateParams { public DateTime CreationDate { get; set; } public DateTime ModificationDate { get; set; } // some methods } public class Localization { public String EnglishLabel { get; set; } public String FrenchLabel { get; set; } // some methods } 然后我会在我的一些模型中使用它们: public class Account // Localization && DateParams { public int ID { get; set; } public String Name { get; set; } public Localization Localization { get; set; } public DateParams DateParams { get; set; } } public class Lead // DateParams only { public int ID { get; set; } public String Name { get; set; } public DateParams DateParams { get; set; } } 我想要实现的是拥有这样的东西 public class LocalizationMap : EntityTypeConfiguration<Localization> { public LocalizationMap() { Property(e => e.EnglishLabel).HasColumnName("en"); Property(e => e.FrenchLabel).HasColumnName("fr"); } } public class AccountMap : EntityTypeConfiguration<Account> { public AccountMap() { HasKey(x => x.ID); Property(e => e.Name).HasColumnName("Name"); HasSubMapping(new LocalizationMap()); HasSubMapping(new DateParamsMap()); ToTable("Account"); } } 我可以使用继承来解决这个问题,但C#不允许多重继承. 解决方法
您可以通过使用复杂类型来实现此目的.这些映射到名为complextypeName_propertyName的表列,但可以通过在DbContext中覆盖OnModelCreating(DbModelBuilder modelBuilder)来更改此行为,如
Entity Framework – Reuse Complex Type中所述
对于你的例子: protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.ComplexType<Localization>(); modelBuilder.Entity<Account>().Property(x => x.Localization.EnglishLabel).HasColumnName("en"); modelBuilder.Entity<Account>().Property(x => x.Localization.FrenchLabel).HasColumnName("fr"); // et cetera } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |