C# 检测实体是否附加到datacontext

C# 检测实体是否附加到datacontext,c#,linq-to-sql,C#,Linq To Sql,我有一个需要保存实体对象的过程。问题是我不知道这个实体是否附加到我的datacontext。为了解决这个问题,我使用以下代码: try { db.ClientUsers.Attach(clientUser); db.Refresh(RefreshMode.KeepCurrentValues, clientUser); } catch { } db.SubmitChanges(); 我正在寻找一种更好的方法来检测一个实体是否属于一个上下文,并测试一个实体是否附加到一个特定的上

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

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

db.SubmitChanges(); 
我正在寻找一种更好的方法来检测一个实体是否属于一个上下文,并测试一个实体是否附加到一个特定的上下文

我想知道。。。对于未连接的对象,返回什么?即使它抛出异常,也可能比刷新更快

(更新)-测试显示返回空值:

        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
并检查空返回值…

我认为更好的解决方案是:

ObjectStateEntry stateEntry = null;
if (context.ObjectStateManager.TryGetObjectStateEntry(entity, out stateEntry))
{
    //you know you are attached!
}

在上找到。

这太棒了!这为DataContext提供了一个很好的“IsAttached(Of T)”扩展方法