题
在 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);
}
解决方案
我相信有两种方法可以做到这一点。
DataContext.TableName.Contains(Item)
或者我们使用 id 字段。如果该项目被插入到数据库中,那么它将被分配一行。
if(Item.id == 0)
DataContext.Insert(Item)
else
DataContext.Update(Item)
其他提示
为什么不直接在新的数据上下文中重新查询对象,而不是附加到新的数据上下文呢?它相信这是一种更可靠且无状态的策略。
不隶属于 StackOverflow