我正在使用Linq to SQL,並且每當更新特定記錄時都想插入到表中。Linq to SQL:在更新到另一個實體期間動態插入
所以可以說我有Table1
和Table2
,每當Table1
一個記錄被更新我想插入新記錄到Table2
。
目前,我有工作代碼,讓我更新Table1
幾個領域時,它被更新,這已經通過爲UpdateTable1
函數創建一個局部的方法來實現,像這樣:
partial void UpdateTable1(Table1 instance)
{
//update some fields
this.ExecuteDynamicUpdate(instance);
}
這效果很好,而且非常實用,我想用它來確保在更新Table1
時始終在Table2
中創建新記錄。順便說一下,這主要是爲了記錄目的。
原來這就是我想下一步該怎麼做:
partial void UpdateTable1(Table1 instance)
{
//update some fields
this.ExecuteDynamicUpdate(instance);
this.ExecuteDynamicInsert(instance.ConvertToTable2());
}
(我使用的是擴展方法在這裏創建基於Table實例表2記錄)
的問題是我得到出現以下錯誤:
The operation cannot be performed for the entity because it is not being change tracked.
任何想法如何使這項工作?
由於需要記錄來自系統的額外數據,觸發器並不好。觸發器將無法解決這個問題。你的選擇涉及到關係已經發生在我身上,但是我試過了(就像你發佈的那樣)並且代碼運行良好,但之後沒有新的日誌記錄 - 你真的看到了這個工作嗎? – musefan 2012-08-13 15:42:26
我已經看到了實體方法的工作。它基本上取決於你何時調用它。如果你在調用'DataContext.SubmitChanges()'之前調用它,那麼它應該可以工作,因爲添加到實體集合類似於調用'log.MyForeignKeyId = x; db.Logs.InsertOnSubmit(x);'但是如果在初次調用'db.SubmitChanges()'後調用它,那麼它將不會被添加,您將不得不再次調用'SubmitChanges'。 – 2012-08-13 16:48:07
解決了它!如果您有興趣,請查看我的答案;) – musefan 2012-08-14 10:38:04