我正在开发一个多语言的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保存特定语言的数据?
答案 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;}
}
这种方法的优势在于,我们不需要为每个必需列提供每种语言的列。如果你想添加新语言,它只是添加新的枚举值而不是域对象的更改。