我使用實體框架4.3.1從ASP .NET MVC 3.0 Web應用程序和我的代碼做一點上脫落下來的舊對象,並用新的對象,看起來像這樣替換它:實體框架中的「The RelationshipManager不能由此RelationshipManager返回」異常的根本原因是什麼?
public void UpdateUnattached(T entryToUpdate, T updatedEntry)
{
var ctx = (EntityFrameworkContext) _context;
ctx.ChangeObjectState(EntityState.Detached, entryToUpdate);
_set.Attach(updatedEntry);
ctx.ChangeObjectState(EntityState.Modified, updatedEntry);
}
除了在_set.Attach
行上發現異常的情況之外,此功能始終有效。
此關係管理器無法返回RelatedEnd。 RelatedManager只能由RelationshipManager返回ObjectStateManager跟蹤的對象或實現IEntityWithRelationships的對象。
對象圖很深,我認爲它告訴我有一個屬性已被設置爲某個對象沒有被跟蹤到某處(請糾正我,如果我錯了)。所以,我的問題是...
如何找出這個異常的根本原因是什麼?
我試過在它周圍試一試,並在catch中調用GetValidationErrors
,但是它也拋出異常。從異常
的更多信息(InnerException
爲空)...
Type: System.InvalidOperationException
Source: System.Data.Entity
Target site: GetRelatedEndInternal
Stacktrace: at System.Data.Objects.DataClasses.RelationshipManager.GetRelatedEndInternal(String relationshipName, String targetRoleName)
at System.Data.Objects.EntityEntry.FindRelatedEntityKeysByForeignKeys(Dictionary`2& relatedEntities, Boolean useOriginalValues)
at System.Data.Objects.EntityEntry.TakeSnapshotOfForeignKeys()
at System.Data.Objects.ObjectStateManager.PromoteKeyEntryInitialization(EntityEntry keyEntry, IEntityWrapper wrappedEntity, IExtendedDataRecord shadowValues, Boolean replacingEntry)
at System.Data.Objects.ObjectContext.AttachSingleObject(IEntityWrapper wrappedEntity, EntitySet entitySet, String argumentName)
at System.Data.Objects.ObjectContext.AttachTo(String entitySetName, Object entity)
at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
at System.Data.Entity.Internal.Linq.InternalSet`1.Attach(Object entity)
at System.Data.Entity.DbSet`1.Attach(TEntity entity)
at ... snip ...
難道你不應該用附加實體的值更新附加實體,而不是試圖交換它們嗎?你似乎削減了一些協會。 –
謝謝,是的 - 有趣的是,如果我完全按照您的說法進行操作(將entryToUpdate的每個屬性設置爲updatedEntry,然後保存而不是附加)即可使用。然而,我想知道的是,爲什麼附件不起作用,並且知道我想知道如何找出這個異常的根本原因。當然,因爲它拋出了例外框架必須知道 - 我只是希望它告訴我。 – kmp
我認爲這是導致問題的分離。我從異常中瞭解到,RelationshipManager嘗試解析不再跟蹤的對象的關聯。 –