Почему RelationshipManager.GetRelatedReference <T>(,) всегда возвращает EntityReference <T>с нулевым значением? - PullRequest
3 голосов
/ 28 марта 2011

По какой-то причине свойства навигации не работают в моей модели Entity Framework.

From the direction N->1, каждый раз, когда я пытаюсь получить EntityReference, он имеет нулевое значение, даже если EntityKey верен.

From the direction 1->N, коллекция всегда пуста.

Такое поведение одинаково для всей моей модели.

Какой бы ни была причина, я думаю, что она должна вызывать целое исключениетихого извлечения несовместимой ссылки.

Каковы возможные причины, по которым ссылка может иметь нулевое значение?

РЕДАКТИРОВАТЬ

Я только что заметил, что имеетчто-то делать с ленивой загрузкой.EntityReference (T) идет со свойством IsLoaded, установленным в false, и явный вызов метода Load решает проблему.Проблема заключается в том, что метод RelationshipManager.GetRelatedReference, вызываемый при обращении к свойству навигации, должен загружать EntityReference.Разве не так?

1 Ответ

3 голосов
/ 28 марта 2011

Эта проблема из-за значения свойства LazyLoadingEnabled.

На первый взгляд, LazyLoadingEnabled = false, по-видимому, означает, что EF будет загружать объектные отношения при загрузке объекта, конечно, с некоторыми ограничениями, чтобы EF не загружал всю базу данных. На самом деле, это означает, что отношения никогда не будут загружены неявно. То есть: из direction N->1 возвращенное EntityReference(T) будет иметь правильное EntityKey, но IsLoaded будет ложным, а Value будет нулевым. С другой стороны, в direction 1->N коллекция будет пустой, IsLoaded будет ложным. EntityReference или EntityCollection могут быть явно загружены с использованием метода Load.

LazyLoadingEnabled = true, с другой стороны, означает, что это, кажется, означает. Ассоциации будут загружаться по мере необходимости.

По умолчанию установлено значение false, что, кстати, вызвало всю эту путаницу, через которую я прошел.

Чтобы избежать путаницы, возможно, должно существовать свойство с именем LoadingMode, которое будет перечислением со значимыми значениями. Как: None, Lazy, Eager

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