我有一个函数,我想返回一个已经附加了一些子实体的新实体。我不想做的是先在数据库中创建它们。我只想创建一个新的实体实例,创建一些新的子实体,并在返回函数中的父实体之前将它们添加到父实体。
我开始使用此代码;
public BusinessEntities.Event CreateEventWithDefaultActions(EventType eventType)
{
Facades.Event eventFacade = new Facades.Event();
IList<BusinessEntities.DefaultAction> defaultActions;
// new event
BusinessEntities.Event skeletonEvent = new BusinessEntities.Event();
skeletonEvent.EventType = eventType;
// load the default actions
defaultActions = eventFacade.LoadDefaultActionTypes(eventType);
// create a new action and attach to the event
foreach (BusinessEntities.DefaultAction defaultAction in defaultActions)
{
BusinessEntities.Action action = new BusinessEntities.Action();
if(!defaultAction.ActionTypeReference.IsLoaded)
defaultAction.ActionTypeReference.Load();
action.ActionType = defaultAction.ActionType;
skeletonEvent.Actions.Attach(action); // exception thrown
}
return skeletonEvent;
}
基本上,我正在创建一个新的Event实体,它可以具有关联的Action实体 - 然后尝试根据其类型加载某些操作,并将Action实体附加到Event权利。当代码行skeletonEvent.Actions.Attach(action);执行时抛出以下异常;
当与此相关端关联的源对象处于添加,删除或分离状态时,Attach不是有效操作。使用NoTracking合并选项加载的对象始终是分离的。
我哪里出错?
答案 0 :(得分:1)
也许您应该尝试使用Add方法而不是Attach。当对象上下文跟踪两个实体时,应使用Attach。您可能必须使用AddObject(或生成的AddToEvent)方法将Event对象添加到ObjectContext。