实体框架更新对象和更改引用

问题描述:

我试图更新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'也必须处于'已删除'状态。

我该如何执行这种关系的更新?

仅从导航属性中删除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