.net 如何在EF Core中有效地建模可翻译属性?
我正在使用EntityFrameworkCore和PostgreSQL在.NET5上构建一个应用程序。在数据库中,我有几个包含字符串属性的实体,这些属性应该可以翻译成不同的语言 我目前的做法是:.net 如何在EF Core中有效地建模可翻译属性?,.net,entity-framework-core,translation,.net,Entity Framework Core,Translation,我正在使用EntityFrameworkCore和PostgreSQL在.NET5上构建一个应用程序。在数据库中,我有几个包含字符串属性的实体,这些属性应该可以翻译成不同的语言 我目前的做法是: public class TString { public int Id { get; set; } /// <summary> /// The string value = Default Value
public class TString
{
public int Id { get; set; }
/// <summary>
/// The string value = Default Value
/// </summary>
public string Text { get; set; }
public virtual ICollection<Translation> Translations { get; set; }
/// <summary>
/// Returns the translation for a given language or the default value.
/// </summary>
/// <param name="language"></param>
/// <returns></returns>
public string Get(string language)
{
if (Translations.Any(t => t.Language == language))
return Translations.First(t => t.Language == language).Text;
return Text;
}
}
public class Translation
{
public int Id { get; set; }
public int TStringId { get; set; }
public virtual TString TString { get; set; }
public string Language { get; set; }
public string Text { get; set; }
}
上面的方法很有效,但对我来说似乎很不公平,因为在查询时,总是需要使用.Include(x=>x.Name)。然后使用inlude(n=>n.Translations)
由于没有办法告诉EF Core在默认情况下加载属性,除非您使用的是自有类型(这不是一个选项,因为这样您就无法使用TString Id进行查询),有没有更好的方法
因为除非您使用的是自有类型,否则无法告诉EF Core在默认情况下加载属性
实际上有-从EF Core 5.0开始,通过使用fluent API,如
modelBuilder.Entity()
.Navigation(e=>e.Name)
.AutoInclude();
modelBuilder.Entity()
.导航(e=>e.Translations)
.AutoInclude();
public class Product
{
public int Id { get; set; }
public int NameId { get; set; }
public virtual TString Name { get; set; }
[...]
}