1

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

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 保存特定于语言的数据?

4

1 回答 1

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;}   
    }

这种方法比您的方法的优点是我们不需要为每个所需列的每种语言都有列。如果你想添加新语言,它只是添加新的枚举值,并且没有更改域对象。

于 2012-11-12T04:02:11.593 回答