我有一个需要保存实体对象的程序。问题是我不知道这个实体是否附加到我的datacontext。为了解决这个问题,我使用以下代码:
try
{
db.ClientUsers.Attach(clientUser);
db.Refresh(RefreshMode.KeepCurrentValues, clientUser);
}
catch { }
db.SubmitChanges();
我正在寻找一种更好的方法来检测一个实体是否属于一个上下文,还要测试一个实体是否附加到一个特定的上下文。
答案 0 :(得分:22)
我想知道...... GetOriginalEntityState
返回非附加对象的内容是什么?即使它抛出异常,它也可能比刷新更快......
(更新) - 测试显示它返回null:
Customer cust = new Customer();
Customer orig = ctx.Customers.GetOriginalEntityState(cust);
Assert.IsNull(orig);
cust = new Customer();
ctx.Customers.Attach(cust);
orig = ctx.Customers.GetOriginalEntityState(cust);
Assert.IsNotNull(orig);
Assert.AreNotSame(cust,orig);
所以也许使用GetOriginalEntityState
并检查null返回值...
答案 1 :(得分:-1)
我认为更好的解决方案是:
ObjectStateEntry stateEntry = null;
if (context.ObjectStateManager.TryGetObjectStateEntry(entity, out stateEntry))
{
//you know you are attached!
}