Эй, ребята, хорошо, вот сценарий:
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, и оно всегда работает .... ну почти всегда
Итак, мой вопрос двоякий:
- почему для HasLoadedOrAssignedValue задано значение true, когда это не должно
- более важно, почему я испытываю это бессвязное поведение. Я знаю, что вам не всегда нужно устанавливать свойство объекта напрямую, так почему же в этот раз оно не работает? И если это правило LINQ to SQL, то почему иногда оно может нарушаться?
ура!