2011-12-15 7 views
0

FormViewからObjectDataSourceにレコードを更新し、このエラーを解決するために失いたいです。指定されたオブジェクトのキーと一致するキーを持つオブジェクトがObjectStateManagerに見つかりませんでした

指定されたオブジェクトのキーと一致するキーを持つオブジェクトは、 がObjectStateManagerに見つかりませんでした。指定したオブジェクトのキー値 が、 の変更を適用する必要があるオブジェクトのキー値と一致することを確認します。

私のコードは、あなたの方法で

private static Entities1 _db = null; 

public static Entities1 CreateDataContext() 
{ 
    if (_db == null) 
    { 
     _db = new Entities1(System.Configuration.ConfigurationManager.ConnectionStrings["Entities1"].ConnectionString); 
     _db.games.MergeOption = MergeOption.NoTracking; 
     _db.my_aspnet_users.MergeOption = MergeOption.NoTracking; 
     _db.platforms.MergeOption = MergeOption.NoTracking; 
    } 
    return _db; 
} 

public void Update(game item) 
{ 
    Entities1 DB = CreateDataContext(); 
    item.modified = DateTime.Now; 
    var obj = (from u in DB.games 
       where u.idgames == item.idgames 
       select u).First(); 
    DB.games.ApplyCurrentValues(item);//Error Here 
    DB.SaveChanges();   
} 
+2

'VARのobj'は未使用です。これは設計によるものですか?返信いただきありがとうございます。 – dasblinkenlight

答えて

6

を下回っている:それは更新することはできませんので

public void Update(game item) 
{ 
    Entities1 DB = CreateDataContext(); 
    item.modified = DateTime.Now; 
    var obj = (from u in DB.games 
       where u.idgames == item.idgames 
       select u).First(); 
    DB.games.ApplyCurrentValues(item);//Error Here 
    DB.SaveChanges();   
} 

itemは付属しません。それはエラーメッセージがあなたにも伝えるものです。

あなたのコンテキストから取得されたobjを使用すると思われます。 objの値をitemの値に設定し、objを使用して更新を行います。サンプルため

EDIT ...

あなたはちょうどあなたがこれを行うだろう変更された日付と時刻を設定したい場合:

public void Update(game item) { 
    Entities1 DB = CreateDataContext(); 

    var obj = (from u in DB.games 
       where u.idgames == item.idgames 
       select u).SingleOrDefault(); 
    if (obj == null) { 
     // handle the case where obj isn't found 
     // probably by throwing an exception 
    } 

    obj.modified = DateTime.Now; 
    DB.games.ApplyCurrentValues(obj); 
    DB.SaveChanges(); 
} 
+0

どのようにアイテムを添付することができますか? –

+0

これを見てくださいhttp://msdn.microsoft.com/en-us/library/bb896271(v=VS.100).aspx一般に、あなたは 'Attach()'を呼び出すか、それは付属の状態でそれを返すオブジェクトです。たとえば、あなたの例の 'obj'が返されます。 – Yuck

+0

私はnhibernatで作成された多くのClassesを持っています。だから今はすべてを.Net 4.0に変換しています。私はobjと病気を手動で作成する場合、病気の時間はプロセスを消費します。私は、ObjectDataSourceから来るアイテムでのみ更新したいと思います。 –

関連する問題