【问题标题】:Mapping same collection with two Navigation Properties使用两个导航属性映射相同的集合
【发布时间】:2015-10-17 15:42:39
【问题描述】:

我有以下型号

public class Locale
{ 
    public int Id { get; set; }
    public ICollection<Localization<Locale>> Localizations { get; set; }
}

public class Localization<T>
{
    public int Id { get; set; }
    public Locale Locale { get; set; }
    public string DisplayName { get; set; }
    public T Entity { get; set; }
}

在这种情况下,我希望能够本地化任何实体,包括本地化本身(即:对于我们以用户语言显示可用语言的地方)。

我在 NHibernate 中有这个工作,但我需要转移到 EF。当我想使用 fluent API 进行如下映射时,就会出现问题。

modelBuilder.Entity<Locale>()
            .HasMany(x => x.Localizations)
            .WithRequired(x => x.Locale)
            .Map(x => x.MapKey("LocaleId"));

这可行,但我需要映射实体本身。 这样做会覆盖以前的地图。

modelBuilder.Entity<Locale>()
            .HasMany(x => x.Localizations)
            .WithRequired(x => x.Entity)
            .Map(x => x.MapKey("EntityId"));

这样做会在任一字段上引发错误(我也尝试过创建一个名为 LocaleLocalization 的本地化子类,结果相同)。

 modelBuilder.Entity<Localization<Locale>>()
             .HasRequired(x => x.Entity)
             .WithMany()
             .Map(x => x.MapKey("LCIDLocale"))

错误

导航属性“实体”不是类型上的声明属性 本土化。验证它没有被明确地从模型中排除 并且它是一个有效的导航属性。

【问题讨论】:

    标签: entity-framework ef-fluent-api


    【解决方案1】:

    解决方案是我需要映射两个集合,一个代表此语言环境的本地化集合,一个代表本地化到此语言环境的其他语言环境的集合。

    ICollection<Localizations> MyLocalizations { get; set; }
    ICollection<Localizations> LocalesLocalizedByMe { get; set; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      相关资源
      最近更新 更多