Обнаруживать, если объект привязан к datacontext
У меня есть процедура, в которой мне нужно сохранить объект объекта. Проблема в том, что я не знаю, привязан ли этот объект к моему datacontext или нет. Для этого я использую следующий код:
try
{
db.ClientUsers.Attach(clientUser);
db.Refresh(RefreshMode.KeepCurrentValues, clientUser);
}
catch { }
db.SubmitChanges();
Я ищу лучший метод для определения того, принадлежит ли сущность к контексту, а также проверять, привязан ли объект к определенному контексту.
Ответы
Ответ 1
Интересно, что делает 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
и проверьте нулевое возвращаемое значение...
Ответ 2
Я думаю, что лучшим решением является следующее:
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.