1

Railcard オブジェクトの end * to 1 の参照を持つ CustomerRailcard オブジェクトを更新しようとしています。問題は、Railcard オブジェクトを削除できないことです。CustomerRailcard オブジェクトの参照を別の RailcardObject に変更するだけで済みます。私はこのようにやっています:

アップデート:

// 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」も「削除済み」状態でなければなりません。

この種の関係を更新するには、他にどのような方法がありますか?

4

1 に答える 1

1

ナビゲーション プロパティから削除するだけでは十分ではありません。customerReilcardToRemove関係を壊すだけで、CustomerReilcardインスタンスは削除しません。リレーションシップにはCustomerReilcardプリンシパルが必要であるため、呼び出してインスタンスをReilcard削除するか、リレーションを null 可能にして孤立したインスタンスを保持する必要があります。customerReilcardToRemoveDeleteObject

于 2012-08-13T19:13:58.273 に答える