Определить, присоединен ли объект к текстовому тексту данных - PullRequest
15 голосов
/ 09 февраля 2009

У меня есть процедура, где мне нужно сохранить объект сущности. Проблема в том, что я не знаю, присоединен ли этот объект к моему текстовому тексту или нет. Для решения этой проблемы я использую следующий код:

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

db.SubmitChanges(); 

Я ищу лучший способ определить, принадлежит ли объект к контексту, а также проверить, присоединен ли объект к определенному контексту.

Ответы [ 2 ]

22 голосов
/ 09 февраля 2009

Интересно ... что GetOriginalEntityState возвращает для неприкрепленного объекта? Даже если оно выдаст исключение, оно, вероятно, будет быстрее обновления ...

(обновление) - тест показывает, что он возвращает ноль:

        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 и проверьте нулевое возвращаемое значение ...

0 голосов
/ 12 июля 2010

Я думаю, что лучшее решение это:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...