1
我試圖更新CustomerRailcard對象,該對象在Railcard對象上有一個引用,其結尾*爲1。問題是,我無法刪除Railcard對象,只能更改引用將CustomerRailcard對象指向另一個RailcardObject。 我在做這樣的:實體框架更新對象和更改引用
UPDATE:
// Updating properties in existing CustomerRailcard.
// This won't update navigation properties (Railcard).
context.ObjectStateManager.ChangeObjectState(existingCustomerRailcard, EntityState.Modified);
context.ApplyCurrentValues("CustomerRailcardsDbo", newCustomerRailcard);
// Now I'm trying to update navigation property of CustomerRailcard to the Railcard
// by removing the reference from old Railcard to CustomerRailcard.
// Railcard can have references to many CustomerRailcards.
var oldRailcard = railcardRepository.FindById(customerDetails.CustomerRailcards.FirstOrDefault(r => r.Id == railcard.Id).Railcard.Id);
var customerRailcardToRemove = oldRailcard.CustomerRailcards.FirstOrDefault(cr => cr.Id == railcard.Id);
// Removing reference to CustomerRailcard from Railcard
oldRailcard.CustomerRailcards.Remove(customerRailcardToRemove);
// Now I'm getting new Railcard I want to have referenced by CustomerRailcard
// and I'm changing its reference tu CustomerRailcard
var newRailcard = railcardRepository.FindById(railcard.Railcard.Id);
// Adding reference to CustomerRailcard
newRailcardDboReference.CustomerRailcards.Add(railcard);
運行在這之後,我會得到這個錯誤
從「CR_RL_FK」 AssociationSet的關係是「被刪除」狀態。考慮到多重性約束,相應的'CustomerRailcardDbo'也必須處於'已刪除'狀態。
我該如何執行這種關係的更新?
但DeleteObject會從數據庫中物理刪除對象。我需要以某種方式只改變對另一個鐵路卡的參考。 – LadislavM 2012-08-14 09:06:44
你的代碼太複雜了,我無法理解你想做什麼。簡單地說,如果您從主體導航屬性中刪除依賴實體,則必須將相同實體添加到其他主體,否則您將得到異常。你的代碼是imho只從導航屬性中刪除實體,但不能將其插入另一個實體。 – 2012-08-14 09:34:04
我已更新代碼及其評論。我希望現在更清楚。基本上我所擁有的是一張名爲Railcards的鐵路卡,其中包含鐵路卡名稱和其他內容,這是不可改變的。我無法刪除或更改任何內容。然後,我有第二張名爲CustomerRailcard的表格,其中每個客戶鐵路卡都參考鐵路卡表中的鐵路卡。當我執行更新時,我試圖僅將客戶鐵路卡中的引用從一個鐵路卡更改爲另一個。我會感謝任何幫助。 – LadislavM 2012-08-14 10:39:34