2009-08-28 1 views
0

私には2つのクラスがあります。 エリアおよびLanguageArea。私はLanguageAreaを使って翻訳されたエリアを扱います。DataContextからクラスをコピーすると、次のデータベース呼び出しでキャッシュされたデータがEntity Frameworkにロードされますか?

Area.cs
文字列のタイトル、
文字列説明、
写真(写真クラスのセット)、
LanguageAreas(LanguageAreaクラスのセット)

LanguageArea.cs
言語(どの言語領域が翻訳されるかを定義する)、
エリア、
Titl E(Areaの翻訳されたタイトル)例えば、
説明(領域の翻訳説明)

UIから要求された翻訳領域は私上記の方法

public Area GetByLanguageId(long areaId, byte LanguageId) 
     { 
      var langArea = db.LanguageArea 
          .Where(i => i.Area.id == areaId && i.Language.id == LanguageId).FirstOrDefault(); 
      Area newArea = null;  
      if (langArea != null && langArea.Area != null) 
      { 
       newArea = langArea.Area; // I have copied to area to get area with pictures in it 
       newArea.Title = langArea.Title; // I got the translated Title 
       newArea.Description = langArea.Description; // I got the translated description 
      }  
      return newArea; 
     } 

最初LanguageAreaを得ます翻訳されたタイトルと説明を持つ全領域オブジェクトを取得します。 しかし翻訳されたタイトルと説明はObjectContextに保存されます。その後、UIから要求されたデフォルトの言語やその他の言語が、ObjectContextから翻訳されたタイトルと説明を取得した後、データはDBから取得されません。

私は試しましたMergeOption.OverwriteChangesです。今回はいつも大丈夫でしたが、保存すると翻訳された情報は元のDBではなく保存されました。

私は試しましたContext.Refresh();これは一時的な解決策のようです。

このような状況を処理するにはどうすればよいですか?

ありがとうございます。

答えて

1

言語領域オブジェクトを取得すると、ObjectContextによってそのオブジェクトが追跡されます。したがって、newAreaに渡すAreaオブジェクトも同様に追跡されます。私はあなたがプレゼンテーションの目的のためだけにAreaオブジェクトを使用しており、変更を保存したくないことを理解しています。

trueの場合、ObjectContextがAreaオブジェクトの追跡を停止し、変更が永続化されないため、newAreaオブジェクトを返す前にObjectContextのDetachメソッドを呼び出すと問題が解決する場合があります。

db.Detach(newArea); return newArea; 
+0

を願って、私は今それを試してみて、それが動作するかどうかここに戻って取得するつもりですかnot –

+0

ありがとうございます –

+0

ObjectContextからnewAreaをデタッチすると、通常はArea(PicturesとLanguageAreas)のサブコレクションもデタッチされますが、これらのサブコレクションが必要です。あなたはこれについてアドバイスをしていますか?ありがとう –

0

私はそれを行いました。私はこれらの行を書いた絵のためdb.Detach(newArea);

. 
. 
. 
db.Detach(a); 
var pics = db.Picture.Where(p => p.Area.id == a.id).AsEnumerable() 
        .Select(p => new Picture() 
      {IsProfile = p.IsProfile, id = p.id, Path = p.Path, Title = p.Title}); 
if (pics.Count()>0) 
    foreach (var pic in pics) 
     a.Pictures.Add(pic); 

return a; 

た後、私はそれが便利に聞こえるこれは他の誰かを助け

おかげ

関連する問題