2009-12-04 153 views
0

我有兩個表FilesystemEntries和CacheEntry,其中每個FilesystemEntry有一個0..1 CacheEntry的關聯(即FilesystemEntry可以有一個空的CacheEntry,但反之亦然) 。最初,所有FilesystemEntries的CacheEntry都是null。我無法改變這個(添加一個新的CacheEntry)。代碼(截)看起來是這樣的:實體框架:插入與另一個實體關聯的新實體

FilesystemEntry filesystemEntry; // Already exists in database 
CacheEntry cacheEntry;   // A new one is created 
// ... 
filesystemEntry.CacheEntry = cacheEntry;  // Was null before (verified in debugger) 
cacheEntry.FilesystemEntry = filesystemEntry; 
_db.AddToCacheEntries(cacheEntry); 

不過,我recieving以下錯誤:

System.Data.UpdateException: A relationship is being added or deleted from an 
AssociationSet 'FK_CacheEntries_0'. With cardinality constraints, a corresponding 
'CacheEntries' must also be added or deleted. 

任何實體框架嚮導知道這是怎麼回事?

同樣,有沒有辦法讓數據庫來處理「ON DELETE CASCADE」(我正在使用sqlite,所以它會通過觸發器)?與指定DAL中的所有刪除操作相比,這將更加方便和麪向未來。

回答

2

不知道這是否是問題所在。

但我會嘗試這樣做:

FilesystemEntry filesystemEntry; // Already exists in database 
CacheEntry cacheEntry; // A new one is created   
filesystemEntry.CacheEntry = cacheEntry; 
// redundant cacheEntry.FilesystemEntry = filesystemEntry; 
// redundant _db.AddToCacheEntries(cacheEntry); 
_db.SaveChanges(); 

第一冗餘操作可能會造成問題。

至於級聯刪除看看這個Tip一個解釋如何級聯刪除真的工程在英孚。

亞歷

+0

真棒的感謝! – 2009-12-06 00:22:04

0

我可能是錯的,但除非我誤解你的實體關係,你可能會嘗試沒有

cacheEntry.FilesystemEntry = filesystemEntry; 

線。這應該是通過隱含的事實,您使用以下類型的分配設置

filesystemEntry.CacheEntry = cacheEntry; 

而且我有好運氣打交道時具有導航性能:

cacheEntry.FilesystemEntryReference.Value = filesystemEntry;