.net 如何在EF Core中有效地建模可翻译属性?

.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

我正在使用EntityFrameworkCore和PostgreSQL在.NET5上构建一个应用程序。在数据库中,我有几个包含字符串属性的实体,这些属性应该可以翻译成不同的语言

我目前的做法是:

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; }
  
        [...]
    }