2012-08-13 99 views
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'也必須處於'已刪除'狀態。

我該如何執行這種關係的更新?

回答

1

僅從導航屬性中刪除customerReilcardToRemove是不夠的 - 比只打破關係,但不會刪除CustomerReilcard實例。您的關係要求CustomerReilcard有一個主體Reilcard,因此您必須通過調用DeleteObject來刪除customerReilcardToRemove實例,或者將關係設爲空並保留孤立實例。

+0

但DeleteObject會從數據庫中物理刪除對象。我需要以某種方式只改變對另一個鐵路卡的參考。 – LadislavM 2012-08-14 09:06:44

+0

你的代碼太複雜了,我無法理解你想做什麼。簡單地說,如果您從主體導航屬性中刪除依賴實體,則必須將相同實體添加到其他主體,否則您將得到異常。你的代碼是imho只從導航屬性中刪除實體,但不能將其插入另一個實體。 – 2012-08-14 09:34:04

+0

我已更新代碼及其評論。我希望現在更清楚。基本上我所擁有的是一張名爲Railcards的鐵路卡,其中包含鐵路卡名稱和其他內容,這是不可改變的。我無法刪除或更改任何內容。然後,我有第二張名爲CustomerRailcard的表格,其中每個客戶鐵路卡都參考鐵路卡表中的鐵路卡。當我執行更新時,我試圖僅將客戶鐵路卡中的引用從一個鐵路卡更改爲另一個。我會感謝任何幫助。 – LadislavM 2012-08-14 10:39:34