我正在尝试在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");
});
知道我做错了什么?
答案 0 :(得分:1)
如果您对同一个表有2个多对多关系,则需要创建2个单独的ICollection
属性,以便Entity Framework完全了解您尝试执行的操作。你不能把它们组合成一个,否则你就会得到你在那里看到的那个可爱的错误。