将实体附加到数据上下文

Posted

技术标签:

【中文标题】将实体附加到数据上下文【英文标题】:Attaching entities to data contexts 【发布时间】:2010-09-06 16:14:03 【问题描述】:

在 LINQ to SQL 中,是否可以在尝试附加实体之前检查它是否已经是数据上下文的一部分?

如果有帮助,请提供一些背景信息...

我在global.asax 中有此代码作为辅助方法。通常,在请求之间,这不是问题。但在登录后,它被多次调用,第二次我最终尝试将Member 对象附加到创建它的同一工作单元中。

private void CheckCurrentUser()

    if (!HttpContext.Current.User.Identity.IsAuthenticated)
    
        AppHelper.CurrentMember = null;
        return;
    

    IUserService userService = new UserService();

    if (AppHelper.CurrentMember != null)
        userService.AttachExisting(AppHelper.CurrentMember);
    else
        AppHelper.CurrentMember = userService.GetMember(
            HttpContext.Current.User.Identity.Name,
            AppHelper.CurrentLocation);

【问题讨论】:

【参考方案1】:

我相信有两种方法可以做到这一点。

DataContext.TableName.Contains(Item)

或者我们使用 id 字段。如果该项目被插入到数据库中,那么它将被分配一个行。

if(Item.id == 0)
   DataContext.Insert(Item)
else
   DataContext.Update(Item)

【讨论】:

【参考方案2】:

为什么不直接在新数据上下文中重新查询对象,而不是附加到新数据上下文?它认为这是一种更可靠且无状态的策略。

【讨论】:

以上是关于将实体附加到数据上下文的主要内容,如果未能解决你的问题,请参考以下文章

EF6基础系列(九)--- 附加离线实体图集到上下文

在实体框架中将对象树附加到对象上下文

如何正确地将已附加到上下文的实体标记为已修改?

找出实体是不是附加到 dbContext 的最合理方法是啥?

EF执行savechanges失败然后直接返回页面的处理办法

Piranha CMS 自定义实体