实体框架:创建一个实体,附加子实体,做一些东西然后坚持实体......怎么样?

时间:2010-09-16 08:19:47

标签: c# .net entity-framework

我有一个函数,我想返回一个已经附加了一些子实体的新实体。我不想做的是先在数据库中创建它们。我只想创建一个新的实体实例,创建一些新的子实体,并在返回函数中的父实体之前将它们添加到父实体。

我开始使用此代码;

    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合并选项加载的对象始终是分离的。

我哪里出错?

1 个答案:

答案 0 :(得分:1)

也许您应该尝试使用Add方法而不是Attach。当对象上下文跟踪两个实体时,应使用Attach。您可能必须使用AddObject(或生成的AddToEvent)方法将Event对象添加到ObjectContext。