1

在我的应用程序中,我需要检索实体的部分图。
这些实体由用户处理,稍后应保存。
因此返回和保存上下文不同,但我需要对整个图表进行更改跟踪。
据我所知,现在不推荐使用 STE
但我不知道为这种情况选择什么类型的实体。谁能给出解释?

4

1 回答 1

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。

这是代码:

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获取更多详细信息

我希望这对你有帮助。

于 2012-12-29T12:22:18.633 回答