在断开连接的场景中使用实体的适当实体类型是什么?

时间:2012-12-29 09:35:55

标签: entity-framework entity-framework-4.1

在我的应用程序中,我需要检索实体的部分图形 这些实体由用户处理,稍后应保存 因此返回和保存的上下文不同,但我需要对整个图形进行更改跟踪 据我所知,STE现在已经弃用了 但我不知道为这种情况选择什么类型的实体。 任何人都可以给出解释吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试下面的一个。

插入已断开连接的实体

这是Insert<>的通用版本,可以插入任何已断开连接的实体。

public TEntity Insert<TEntity>(TEntity entity) 
            where TEntity : EntityObject 
{ 
    AddTo<TEntity>(entity); 
    this.SaveChanges(true); 
    // Without this, attaching new entity of same type in same context fails. 
    this.Detach(entity); 
    return entity; 
} 

插入已断开连接的子实体

插入子实体的一般原则是:

  1. 首先你必须在上下文中附加父实体,

  2. 然后你必须设置父和孩子之间的映射(你不能有映射!),

  3. 然后你必须调用SaveChanges。

  4. 以下是代码:

    public TEntity Insert<TParent, TEntity>(
        TParent parent,
        Action<TParent, TEntity> addChildToParent,
        TEntity entity)
        where TEntity : EntityObject
        where TParent : EntityObject
    {
        AddTo<TParent, TEntity>(parent, addChildToParent, entity);
        this.SaveChanges();
        this.AcceptAllChanges();
        // Without this, consequtive insert using same parent in same context fails.
        this.Detach(parent); 
        // Without this, attaching new entity of same type in same context fails.
        this.Detach(entity);
        return entity;
    }
    
    private void AddTo<TParent, TEntity>(TParent parent, 
        Action<TParent, TEntity> addChildToParent, 
        TEntity entity) 
        where TEntity : EntityObject
        where TParent : EntityObject
    {
        Attach<TParent>(parent);            
        addChildToParent(parent, entity);            
    } 
    

    您可以从Entity Framework working in fully disconnected Here

    获取更多详细信息

    我希望这会对你有所帮助。