【问题标题】:Entity Framework Many To Many exception with inheritance实体框架多对多异常与继承
【发布时间】:2014-12-29 19:37:38
【问题描述】:

我正在尝试在 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");
            });

知道我做错了什么吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 知道为什么我在尝试查询时会得到空结果吗?
    • 因为映射错误,它没有从数据库中提取任何内容。
    • 地图本身有问题吗?或者是别的什么?我现在在 Language.cs 上有两个 ICollections。
    • 我不知道。不过,您可能应该将其作为一个单独的问题。
    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2013-04-21
    • 2013-03-17
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多