首先在EF代码中定义特定于语言的实体的有效方法

时间:2012-11-11 22:26:42

标签: asp.net entity-framework localization code-first

我正在开发一个多语言的ASP.NET Web应用程序,它利用Entity Framework Code First来保持数据持久性。例如,我为我的“Project”实例定义了一个实体

public class Project
{     
    public Guid Id {get; set;}
    public string Name {get; set;}
    public string Descr {get; set;}    
}

现在我想添加另一种语言支持,以允许管理员为不同语言的项目描述保存不同的字符串数据。现在我必须继续添加像

这样的属性
public string Name_Es {get; set;} 
public string Descr_Es {get; set;}

并提供特定逻辑以允许这些语言特定字段的填充。

是否有更有效的方法允许通过EF Code First保存特定语言的数据?

1 个答案:

答案 0 :(得分:1)

一旦我们完成了一个项目越来越简单的项目。实体就像这样,

   public class Project
    {     
        public Guid Id {get; set;}
        public string Name {get; set;}
        public string Descr {get; set;}   
        publis List<Translation>  NameTranslations{get;set;}
    }

    public Translation
    {
      public int Id {get;set;}
      public int LanguageId {get;set;}
      public string Text{get;set;}
    }

在EF图层之上,我们可以使用Automapper将我们的域对象与特定语言映射到DTO。所以Dto没有所有的语言翻译。我们有一个静态变量,它具有当前语言Id(Enum),并且依赖于Automapper将从NameTranslations列表中选择正确的转换。

   public class ProjectDto
    {     
        public Guid Id {get; set;}
        public string Name {get; set;}
        public string Descr {get; set;}   
    }

这种方法的优势在于,我们不需要为每个必需列提供每种语言的列。如果你想添加新语言,它只是添加新的枚举值而不是域对象的更改。