Как определить, был ли объект Linq присоединен к контексту данных? - PullRequest
3 голосов
/ 21 декабря 2009

Использование Linq-to-Sql:

MyClass obj;
...
// need to delete this object
dataContext.GetTable(obj.GetType()).DeleteOnSubmit(obj);

НО

Я не знаю, был ли obj присоединен к контексту данных. И если этого не произошло, последний вызов DeleteOnSubmit вызывает исключение.

Должен быть простой способ определить, присоединен ли obj к dataContext - но я не вижу ничего очевидного.

Как ты это делаешь?

Ответы [ 3 ]

4 голосов
/ 21 декабря 2009

Хотя вы, возможно, захотите взглянуть на свой дизайн, поскольку подобные вещи должны быть чем-то, что вы можете определить детерминистически, это возможно сделать.

К сожалению, точный вызов, чтобы определить, присоединен ли объект (или, во внутренней номенклатуре L2S, «отслеживается»), требует, чтобы вы вызвали Context.Services.ChangeTracker.GetTrackedObject, что составляет internal. Самое близкое, что я вижу, это вызов Table.GetOriginalEntityState, передача рассматриваемой сущности. Если возвращаемое значение равно null, то объект не отслеживается (не привязан). Если возвращаемое значение не равно null, то объект отслеживается (прикрепляется).

Обратите внимание, что я на самом деле не проверял это, но просмотр кода в Reflector создает у меня впечатление, что это должно работать для вас.

0 голосов
/ 21 декабря 2009

Один из способов определить, присоединен ли объект к контексту данных, - просмотреть события PropertyChanging и PropertyChanged.

У меня есть способ отделить их от сущностей следующим образом:


public virtual void Detach()
{
   PropertyChanging = null;
   PropertyChanged = null;
} 

Итак, если эти два свойства не равны NULL, объект присоединяется.

Randy

0 голосов
/ 21 декабря 2009

Link2SQL, я полагаю? Это должно быть видно из вашего кода. Вам действительно нужно динамически запрашивать состояние во время выполнения? obj присоединяется только в том случае, если вы получили его из своего dataContext.

Я задал похожий вопрос некоторое время назад . Возможно, комментарии Роберта Харви будут вам полезны.

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