使用EntityTypeConfiguration 时的抽象域模型基类

获取Base对象属性的中心映射是否有一些技巧? 使用EntityTypeConfiguration时是否有一些抽象类的简单模式。
非常感谢。 我无法申报课程

Public class BaseEntityConfig : EntityTypeConfiguration 

类似的问题,我无法得到工作的答案如何创建和使用generics类EntityTypeConfiguration 和动态方式生成EntityTypeConfiguration:类型’TResult’必须是不可为空的值类型

 public abstract class BosBaseObject { public virtual Guid Id { set; get; } public virtual string ExternalKey { set; get; } public byte[] RowVersion { get; set; } } public class News : BosBaseObject { public String Heading { set; get; } } public class NewsMap : EntityTypeConfiguration { public NewsMap() { //Base Object Common Mappings // How can we use a central mapping for all Base Abstract properties } } // Something like this but very open to any suggestion.... public class BosBaseEntityConfig : EntityTypeConfiguration { public void BaseObjectMap( ) { // Primary Key this.HasKey(t => t.Id); // Properties this.Property(t => t.Id).HasDatabaseGeneratedOption(databaseGeneratedOption: DatabaseGeneratedOption.None); this.Property(t => t.RowVersion) .IsRequired() .IsFixedLength() .HasMaxLength(8) .IsRowVersion(); //Column Mappings this.Property(t => t.Id).HasColumnName("Id"); } } 

上面的答案肯定有效,虽然这可能会稍微清晰一点,并且在DbContext中注册配置时具有相同的优势。

 public abstract class BaseEntity { public int Id { get; set; } } public class Company : BaseEntity { public string Name { get; set; } } internal class BaseEntityMap : EntityTypeConfiguration where T : BaseEntity { public BaseEntityMap() { // Primary Key HasKey(t => t.Id); } } internal class CompanyMap : BaseEntityMap { public CompanyMap() { // Properties Property(t => t.Name) .IsRequired() .HasMaxLength(256); } } public class AcmeContext : DbContext { public DbSet Companies { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new CompanyMap()); } } 

一天早上,克里斯蒂安·威廉姆斯和我自己早上到达了解

6小时后我破了。 我认为这是一个相当干净的结果。 诀窍是忘记在从EntityTypeConfiguration派生的类中进行每个操作并构建自定义BaseConfig,然后获取此实例并为此类添加细节。 希望通过摘要帮助其他人做代码…

 public abstract class BosBaseObject { public virtual Guid Id { set; get; } public virtual string ExternalKey { set; get; } public byte[] RowVersion { get; set; } } public abstract class BosObjectDateManaged : BosBaseObject { public DateTimeOffset ValidFrom { set; get; } public DateTimeOffset ValidTo { set; get; } } public class News : BosObjectDateManaged { public String Heading { set; get; } } protected override void OnModelCreating(DbModelBuilder modelBuilder) { var conf = new BosBaseEntityConfiguration();//Construct config for Type modelBuilder.Configurations.Add( conf ); // this has base mapping now var newsConf = new NewsConfiguration(conf); // now the Object specific properties stuff } } public class BosBaseEntityConfiguration : EntityTypeConfiguration where T : BosBaseObject { public BosBaseEntityConfiguration() { // Primary Key this.HasKey(t => t.Id); //// Properties this.Property(t => t.Id).HasDatabaseGeneratedOption(databaseGeneratedOption: DatabaseGeneratedOption.None); this.Property(t => t.RowVersion) .IsRequired() .IsFixedLength() .HasMaxLength(8) .IsRowVersion(); //Column Mappings this.Property(t => t.Id).HasColumnName("Id"); } } public class NewsConfiguration { public NewsConfiguration(BosBaseEntityConfiguration entity) { // Table Specific & Column Mappings entity.ToTable("News2"); entity.Property(t => t.Heading).HasColumnName("Heading2"); } } 

对不起,我不能发表评论,但我会这样做只是交换这两行

  modelBuilder.Configurations.Add( conf ); // this has base mapping now var newsConf = new NewsConfiguration(conf); // now the Object specific properties stuff to new NewsConfiguration(conf); // now the Object modelBuilder.Configurations.Add( conf ); // this has base mapping now 

这有助于EF专业领域。