2017-02-20 4 views
2

エンティティフレームワークのマッピングに関する問題に直面しています。当初のモデルは、エンティティフレームワークのコアマッピングの問題

public class Model1 
{ 
    public string[] Fields 
    { get; set; } 
} 

のようになり、dbに保存されたデータは["data1"、 "data2"]のようになります。今では新しい要件ごとに私のモデルは以下のように変更されました

public class Model1 
{ 
public Model2[] Fields 
     { 
      get; 
      set; 
     } 
} 

public class Model2 
{ 
public string prop1 {get;set;} 
public string prop2 {get;set;} 
} 

新しい実装では新しい節約がうまくいきます。しかし、既存のレコードでは、データを取得している間に型キャストの問題が発生します。

文字列配列をmodel2配列に変換できません。

どうすれば問題を解決できますか?

+0

コード-まず、私はあなたが応答をありがとうDBレベル –

+0

で新しいスキーマに最初に古いデータを移行する必要があると思う:それは次のようになります。しかし、これはすでに製造段階にあるので、私はすべてのDBで変更することはできません。コード側の解決策のみが必要です。 – Bhimisetty

+0

あなたの新しいモデルはすでに生産中ですか?本番環境でef migrationを実行できますか? –

答えて

0

大丈夫です。あなたはMODEL1のために同じエンティティを維持する必要があるが、単にゲッターを追加:

public class Model1 
{ 
    public string[] Fields { get; set; } 

    public string prop1 { get { return Field[0]; } } 
    public string prop2 { get { return Field[1]; } } 
} 

その後、あなたはすべてのあなたのMODEL1データをフェッチのみ移行目的のためのメソッドを作成することができ、あなたはモデル2にそれらを翻訳して、それらを保存します。それは可能ではないかもしれ

using (var context = new YourContext()) 
{ 
    foreach(var model1 in context.SetModel1) 
    { 
     context.SetModel2.Add(
      new Model2() { prop1 = model1.prop1, prop2 = model1.prop2 } 
     ); 
    } 
    context.SaveChanges(); 
} 
関連する問題