我有一個MySQL數據庫,它的基本結構是這樣的:對象重新插入到數據庫中刪除後立即(的DBLinq)
Manufacturer <== ProbeDefinition <== ImagingSettings
ElementSettings ====^ ^==== ProbeInstance
我使用的是InnoDB允許外國鍵,所有的外鍵指向ProbeDefinition
已設置ON DELETE CASCADE
。
我遇到的問題是當我在代碼中刪除ProbeDefinition
時,它立即重新插入。級聯刪除正常發生,所以其他表被清除,但似乎LINQ to SQL可能無故發送插入。檢查數據庫上的ChangeSet屬性顯示1刪除,並且沒有插入。
我使用下面的代碼的小位執行刪除操作:在MySQL
database.ProbeDefinition.DeleteOnSubmit(probe);
database.SubmitChanges();
日誌顯示正在執行以下命令時,這是運行:
BEGIN
use `wetscoprobes`; DELETE FROM wetscoprobes.probedefinition WHERE ID = 10
use `wetscoprobes`; INSERT INTO wetscoprobes.probedefinition (CenterFrequency, Elements, ID, IsPhased, ManufacturerID, Name, Pitch, Radius, ReverseElements) VALUES (9500000, 128, 10, 1, 6, 'Super Probe 2', 300, 0, 1)
COMMIT /* xid=2424 */
這是什麼原因這不必要INSERT
?請注意,在完全相同的方式刪除Manufacturer
刪除正確,用下面的日誌:
BEGIN
use `wetscoprobes`; DELETE FROM wetscoprobes.manufacturer WHERE ID = 9
COMMIT /* xid=2668 */
編輯:經過進一步的測試,似乎我已經填充的列表框與列表後,這只是發生ProbeDefinition
s。
我嘗試過運行上面刪除代碼後下面的代碼片段已經運行:
var manufacturer = (Manufacturer)cbxManufacturer.SelectedItem;
var probes = manufacturer.ProbeDefinition;
foreach (var probe in probes)
{
cbxProbeModel.Items.Add(probe);
}
對象被刪除正確表示代碼運行,不過這點之後的任何時間,它後執行插入前刪除。它不喜歡這個對象被引用的事實嗎?
這裏是我運行,以測試從中間窗口刪除定義代碼:
database.ProbeDefinition.DeleteOnSubmit(database.ProbeDefinition.Last())
database.SubmitChanges()
如果另一個表正在被刪除,那麼很可能與您在LinqToSql設計器的ProbeDefinition表上的設置有關。你能提供這些設置嗎? – 2010-01-28 20:41:51
我沒有使用LinqToSql設計器,而是使用DbLinq提供的DbMetal.exe生成類,並且我使用代碼連接。查看從DbMetal生成的定義,我沒有看到任何代碼相關的刪除... – 2010-01-28 20:47:22
@NickLarsen:我已經更新了一些更多的調查結果的問題,特別是只有在現有的對象引用後刪除也執行插入。 – 2010-01-28 21:55:49