EF 4.3流利映射中间表TPT

时间:2013-04-18 21:52:05

标签: entity-framework fluent entity-framework-4.3

我有以下遗留表格结构(此帖子已简化) enter image description here

以下是我对配置实体的微弱尝试:

public class EntityConfiguration : EntityTypeConfiguration<Entity> {
public EntityConfiguration() {
  ToTable("Entity");
  HasKey(x => x.Id);
  Property(x => x.Id)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

  HasMany(x => x.TypeOneUpdateBlacklist)
    .WithMany()
    .Map(x => {
      x.ToTable("UpdateBlacklist");
      x.MapLeftKey("EntityId");
      x.MapRightKey("UpdateId");
    });

  HasMany(x => x.TypeTwoUpdateBlacklist)
    .WithMany()
    .Map(x => {
      x.ToTable("UpdateBlacklist");
      x.MapLeftKey("EntityId");
      x.MapRightKey("UpdateId");
    });
}

配置呈现此错误:

已定义具有架构'dbo'和表'UpdateBlacklist'的EntitySet'EntityBlacklistUpdate'。每个EntitySet都必须引用一个唯一的模式和表。

有没有配置这个?提前致谢

1 个答案:

答案 0 :(得分:0)

您应该能够使用基本类型Update创建多对多映射:

public class EntityConfiguration : EntityTypeConfiguration<Entity> {
    public EntityConfiguration() {
    ToTable("Entity");
    HasKey(x => x.Id);
    Property(x => x.Id)
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

    HasMany(x => x.Updates)
        .WithMany()
        .Map(x => {
            x.ToTable("UpdateBlacklist");
            x.MapLeftKey("EntityId");
            x.MapRightKey("UpdateId");
    });
}

但是,要求您的班级Entity只有基本类型的导航集合Updates,而不是两个派生类型的两个导航集合。只有当数据库模式真正代表一个继承模型时才有可能,即给定的Update行可以 具有相关的TypeOneUpdate a TypeTwoUpdate行,两者都不是两者。如果它可以同时具有这两者,则无法使用TPT进行映射,但您必须创建一对一的关系。