2012-04-20 11 views
0

私のoptimizedSearchレコードのすべての値を完全に新しく生成されたPOCOで更新しようとしています手動で私のLINQのツーSQLオブジェクト内のすべての値をリセットするこれを行うには、私は私がnullでないことが、その後、呼び出すために好きな値を設定します。私はcontext.table.attach()を使用しているときにレコードが既に存在すると不平を言っているのはなぜですか?

 if (person.xosPodOptimizedSearch == null) 
     { 
      person.xosPodOptimizedSearch = record; 
     } 
     else 
     { 
      context.xosPodOptimizedSearches.Attach(record, true); 
      context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, record); 
     } 

もし私personように、このコードの目的がありますレコードにxosPodOptimizedSearchレコードがない場合は、追加してください。すでに人がいる場合は、作成したPOCOの値が更新されたものにします。

しかし、このrunnsと.attach(record, true)が実行されると、.InsertOnSubmit()の代わりにattach()が使用されているため、レコードが存在することがわかっているので、Linq-to-SQLはDuplicateKeyException occurred: Cannot add an entity with a key that is already in useをスローします。

どのようにして、そのレコードのDBの値を一切使用せずに、生成した値でデータを100%更新できますか?

+0

は 'record'新しいオブジェクトまたは既にデータベースにあるが、あなたのプロパティを変更したオブジェクトですか? – Bazzz

+0

新しいレコードは、= new xosPodOptimizedSearches();でコード内でインスタンス化されています。 – KallDrexx

+0

を呼び出すと、 'context.SubmitChanges()'は 'person.xosPodOptimizedSearch'に割り当てられた後にデータベースに入るのに十分なはずですか? http://msdn.microsoft.com/en-us/library/bb292162.aspx – Bazzz

答えて

0

これは私のエラーです。私はLinq-to-SQLを混乱させていました。なぜなら私のコードでは迷いましたrecord.xosPerson = person;コールを持っていたので、人物のレコードが新しいレコードに関連付けられていて、古いものが忘れていたと思っていました。

関連する問題