2012-11-11 22 views
1

我正在開發一個多語言的ASP.NET Web應用程序,該程序利用實體框架代碼優先實現數據持久性。例如,我已經定義了一個實體的我的「項目」實例首先在EF代碼中定義特定語言實體的有效方法

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

一旦我們做了一個項目項目,其中有更薄弱的收購。實體都像這樣,

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

而上,我們可以使用Automapper我們的域對象映射與特定語言的DTO的EF層的頂部。所以Dto沒有所有的語言翻譯。我們有一個具有當前語言ID(Enum)的靜態變量,並且取決於Automapper將從NameTranslations列表中選擇正確的翻譯。

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

這種方法比你的優點是我們不需要爲每個需要的列提供每種語言的列。如果你想添加新的語言,只需添加新的枚舉值,而不需要修改域對象。