【发布时间】: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