public void RemoveUserRoom(ChatUser user, ChatRoom room) { RunNonLazy(() => { // The hack from hell to attach the user to room.Users so delete is tracked ObjectContext context = ((IObjectContextAdapter)_db).ObjectContext; RelationshipManager manger = context.ObjectStateManager.GetRelationshipManager(room); IRelatedEnd end = manger.GetRelatedEnd("JabbR.Models.ChatRoom_Users", "ChatRoom_Users_Target"); end.Attach(user); room.Users.Remove(user); }); }
public static void RemoveReferenceFromCollection( this ObjectContext oc, object target, string propertyName, object toBeRemoved) { EntityType entityType = oc.MetadataWorkspace.GetItem <EntityType>( target.GetType().FullName, DataSpace.CSpace); NavigationProperty navProperty = entityType.NavigationProperties[propertyName]; ObjectStateEntry entry = oc.ObjectStateManager.GetObjectStateEntry(target); IRelatedEnd relatedEnd = entry.RelationshipManager .GetRelatedEnd(navProperty.RelationshipType.Name, navProperty.ToEndMember.Name); relatedEnd.Attach(toBeRemoved); relatedEnd.Remove(toBeRemoved); }