我有以下型号
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。当我想使用流畅的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的Localization子类,结果相同)。
modelBuilder.Entity<Localization<Locale>>()
.HasRequired(x => x.Entity)
.WithMany()
.Map(x => x.MapKey("LCIDLocale"))
错误
导航属性“Entity”不是类型的声明属性 本土化。验证它是否未从模型中明确排除 并且它是一个有效的导航属性。
答案 0 :(得分:0)
解决方案是我需要映射两个集合,一个表示此Locale的Localizations集合,另一个表示本地化为此语言环境的其他Locales集合。
ICollection<Localizations> MyLocalizations { get; set; }
ICollection<Localizations> LocalesLocalizedByMe { get; set; }