2009-08-17 101 views
1

我正在使用實體框架掛鉤到舊的遺留數據庫的WPF系統上。我們在調試時掛接到實時數據的備份,並在空數據庫上運行測試。僅當嘗試從實時數據的備份中刪除時,我收到以下錯誤。Linq到實體/實體框架刪除異常

此代碼:

License license = ReadLicense(id); 
entities.DeleteObject(license); 
entities.SaveChanges(); 

產生此SQL:

exec sp_executesql N'delete [dbo].[Product] 
where ((([Group_ID] = @0) and ([Parent_ID] = @1)) and ([Prod_ID] = @2))',N'@0 nvarchar(32),@1 nvarchar(32),@2 nvarchar(32)',@0=N'someIdValue1',@1=N'someIdValue2',@2=N'someIdValue3' 

這又產生這樣的錯誤:

消息208,級別16,狀態1,過程TrackDeletedProduct,4號線。 無效的對象名稱'DeletedRecords.dbo.Product_Deleted'。

如果將生成的SQL更改爲「select」查詢,則返回一行,所以'ReadLicense'返回一個有效的實體。我無法真正理解爲什麼這不起作用,尤其是當它僅針對實時數據時。 「許可」實體是從基礎「產品」實體繼承的兩個實體之一。

乾杯。

回答

5

從我所看到的情況來看,它好像是表Product上有一個觸發器,當你刪除一行並調用存儲過程TrackDeletedProduct時,它將觸發。

該過程將(僅在此處猜測)嘗試將產品條目複製到DeletedRecords數據庫中的Product_Deleted表中,但在該數據庫上失敗 - 無論其他數據庫還是該表似乎都不存在。

所以我不認爲這與ADO.NET Entity Framework或LINQ-to-Entities有什麼關係,但與SQL Server有很大關係 - 請檢查您的後端數據庫配置!

Marc

+1

非常感謝你的男人,沒想到表觸發器。僅供參考,數據庫的空白版本是從備份的創建腳本的減少版本創建的,我發現自從向您的同事表明您是解決方案後,我發現了這一點。所以觸發器根本不在那裏。 Rekon我應該編輯標籤?可以幫助其他人... – andrej351 2009-08-17 05:29:40

+0

很高興我能幫上忙 - 我會讓標籤保持原樣 - 沒問題。 – 2009-08-17 05:37:52