Почему свойство HasLoadedOrAssignedValue имеет значение true? - PullRequest
5 голосов
/ 14 июля 2009

Эй, ребята, хорошо, вот сценарий:

VS 2008 .NET 3.5 SP1, LINQ to SQL.

У меня есть Product Entity, у которого есть поле ImageID, поэтому оно связано с Image Entity. Это все определено в схеме и DBML.

Теперь, скажем, я создал новую сущность Product без ImageID и сохранил ее в БД. На этом этапе в поле _Image сущности HasLoadedOrAssignedValue установлено значение false, как и должно быть.

Теперь, когда я иду и извлекаю эту сущность из БД без ImageID, т. Е. Для ImageID устанавливается значение null, а для присоединенного к нему объекта изображения также устанавливается значение null, HasLoadedOrAssignedValue устанавливается в значение true .... ??

Теперь, когда я пытаюсь установить для свойства ImageID допустимое значение int, я получаю исключение ForeignKeyReferenceAlreadyHasValueException.

Теперь я знаю, что люди говорят: «О, вы должны сами установить свойство отношений, поэтому Product.Image = someImage, а не Product.ImageID = 2», но я всегда устанавливаю поле ID, и оно всегда работает .... ну почти всегда

Итак, мой вопрос двоякий:

  1. почему для HasLoadedOrAssignedValue задано значение true, когда это не должно
  2. более важно, почему я испытываю это бессвязное поведение. Я знаю, что вам не всегда нужно устанавливать свойство объекта напрямую, так почему же в этот раз оно не работает? И если это правило LINQ to SQL, то почему иногда оно может нарушаться?

ура!

Ответы [ 2 ]

2 голосов
/ 08 октября 2009

Проблема в том, что что-то просматривает свойство Image и заставляет его загружаться - возможно, даже отладчик.

Установите точку останова в свойстве Product.Image и посмотрите, какой путь вызывает его.

1 голос
/ 09 февраля 2011

Итак, у меня была такая же проблема сегодня, и я не знаю, поможет ли это кому-нибудь, но оказалось, что в моем файле LINQ Entity DBML у меня была связь, скажем, между Обзорами и Пользователями по UserID. Отношения были названы User1. Когда я загрузил форму, я использовал это отношение, чтобы установить некоторую информацию в строке состояния. К сожалению, у меня также был список пользователей в раскрывающемся списке в другом месте формы. Поэтому, когда я пытался изменить раскрывающийся список, он знал, что данные уже используются. Как только я сделал отдельный запрос linq для моей строки состояния формы, все заработало. Я знаю, что это ожидаемое поведение, но это было довольно неприятно.

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