1

データの永続性のためにEntityFrameworkCodeFirstを利用する多言語ASP.NETWebアプリケーションを開発しています。たとえば、「プロジェクト」インスタンスのエンティティを定義しました

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コードファーストを介して言語固有のデータを保存できるようにするためのより効率的な方法はありますか?

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 に答える