实体框架使用继承的多对多例外

时间:2014-12-29 19:37:38

标签: entity-framework orm entity-framework-6

我正在尝试在Record对象上创建两个多对多关系图:

记录从

继承的对象
public class Record {
    public virtual ICollection<Language> SourceLanguages { get; set; }
    public virtual ICollection<Language> TargetLanguages { get; set; }
}

第二个对象

public class Language
{
    public int Language { get; set; }
    public string Locale { get; set; }
    public string LanguageName { get; set; }

    public virtual ICollection<Record> Records { get; set; } 
}

记录地图

public class RecordMap : EntityTypeConfiguration<Record>
{
      this.HasMany(r => r.SourceLanguages)
            .WithMany(c => c.Records)
            .Map(sl =>
            {
                sl.ToTable("SourceLanguageRecordMap", "dbo");
                sl.MapLeftKey("RecordId");
                sl.MapRightKey("LanguageId");
            });

        this.HasMany(r => r.TargetLanguages)
            .WithMany(c => c.Records)
            .Map(tl =>
            {
                tl.ToTable("TargetLanguageRecordMap", "dbo");
                tl.MapLeftKey("RecordId");
                tl.MapRightKey("LanguageId");
            });
}

当我在上面列出的对象上运行迁移时,出现以下错误:

  

System.Data.Entity.Core.MetadataException:指定的架构不是   有效。错误:关系   未加载“Toolbox.EntityModel.Contexts.Record_SourceLanguages”   因为“Toolbox.EntityModel.Contexts.Language”类型不是   可用。 ...

     

指定的架构无效。错误:关系   未加载“Toolbox.EntityModel.Contexts.Record_SourceLanguages”   因为“Toolbox.EntityModel.Contexts.Language”类型不是   可用。

如果我对以下行进行评论,它只适用于一对多地图,但是,它会将RecordId_Record添加到语言表中。知道为什么吗?

  this.HasMany(r => r.TargetLanguages)
            .WithMany(c => c.Records)
            .Map(tl =>
            {
                tl.ToTable("TargetLanguageRecordMap", "dbo");
                tl.MapLeftKey("RecordId");
                tl.MapRightKey("LanguageId");
            });

知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您对同一个表有2个多对多关系,则需要创建2个单独的ICollection属性,以便Entity Framework完全了解您尝试执行的操作。你不能把它们组合成一个,否则你就会得到你在那里看到的那个可爱的错误。