【问题标题】:EF 4.3 fluent mapping Intermediate table TPTEF 4.3 fluent mapping 中间表TPT
【发布时间】:2013-04-18 21:52:04
【问题描述】:

我有以下遗留表结构(为这篇文章简化)

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

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”的实体集“EntityBlacklistUpdate”。每个 EntitySet 必须引用一个唯一的模式和表。

有没有配置这个?在此先感谢

【问题讨论】:

  • 看来这是不可能的。我能想出的唯一可行的解​​决方案是两个不同的表 TypeOneUpdateBlacklist 和 TypeTwoUpdateBlacklist。

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


【解决方案1】:

您应该能够使用基本类型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 一个TypeTwoUpdate 行,两者都不会两者。如果两者都可以,则不能将其与 TPT 映射,但必须创建一对一的关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-11
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多