私の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%更新できますか?
は 'record'新しいオブジェクトまたは既にデータベースにあるが、あなたのプロパティを変更したオブジェクトですか? – Bazzz
新しいレコードは、= new xosPodOptimizedSearches();でコード内でインスタンス化されています。 – KallDrexx
を呼び出すと、 'context.SubmitChanges()'は 'person.xosPodOptimizedSearch'に割り当てられた後にデータベースに入るのに十分なはずですか? http://msdn.microsoft.com/en-us/library/bb292162.aspx – Bazzz