检测实体是否附加到datacontext

时间:2009-02-09 11:00:58

标签: c# linq-to-sql

我有一个需要保存实体对象的程序。问题是我不知道这个实体是否附加到我的datacontext。为了解决这个问题,我使用以下代码:

try
{
    db.ClientUsers.Attach(clientUser);
    db.Refresh(RefreshMode.KeepCurrentValues, clientUser);
}
catch { }

db.SubmitChanges(); 

我正在寻找一种更好的方法来检测一个实体是否属于一个上下文,还要测试一个实体是否附加到一个特定的上下文。

2 个答案:

答案 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!
}

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/49e97c25-7325-457a-891b-8fd58c726f3e上找到。