分離天体を.Net4/EF4プロジェクトに保存するのに最適な次のコードがあります。そのコードを新しい.Net4.5/EF5プロジェクトで使用したかったのです。私はそれをコピーしました、そして今それは私に次のコンパイルエラーを与えます:
「MyEntitiesには「TryGetObjectByKey」の定義が含まれておらず、タイプMyEntitiesの最初の引数を受け入れる拡張メソッド「TryGetObjectByKey」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)」
伝えられるところでは、参照されているSystem.Data.Entityアセンブリ(.dll)のSystem.Data.Objects名前空間にあります(したがって、これを使用しています)。
public bool UpdateChanged(IEntityWithKey DetachedObject = null) {
bool Result = false;
try {
using (MyEntities db = new MyEntities()) {
if (DetachedObject != null) {
object Original = null;
if (db.TryGetObjectByKey(DetachedObject.EntityKey, out Original))
db.ApplyCurrentValues(DetachedObject.EntityKey.EntitySetName, DetachedObject);
} // if they want to Update an Entity
db.SaveChanges();
Result = true;
} // using the database
} catch (Exception e) {
} // try-catch
return Result;
} // UpdateChanged - Method
このリンクによると、動作するはずです:http: //msdn.microsoft.com/en-us/library/bb738728.aspx
手伝ってもらえますか?
更新/解決策:
以下の@Rowanの回答に基づいて、分離オブジェクトを受け取るUpdateChangedメソッドを作成する代わりに、Saveメソッドを次のようなものに変更しました。
using (MyEntities db = new MyEntities()) {
if (o.ID > 0) {
// Existing Owner
db.Owners.Attach(o);
db.Entry(o).State = EntityState.Modified;
db.Entry(o.Address).State = EntityState.Modified;
} else {
// New Owner
db.Owners.Add(o);
} // if this is a New Owner
db.SaveChanges();
} // using the database