Как я могу использовать Entity Framework для поиска только в Магазине, а не в локальных данных? - PullRequest
2 голосов
/ 16 ноября 2011

Я использую EF 4.1 и все еще пытаюсь выяснить некоторые детали.У меня есть отношения родитель (один) -дет (много) в базе данных.EF-объект, представляющий этого потомка, имеет свойство, представляющее одного из родителей.Я явно устанавливаю FK-поле child.parentId, а затем могу сделать context.Add (child), затем context.SaveChanges () и дочернюю запись с правильным родительским внешним ключом, которая отображается в базе данных.Все хорошо, что касается БД.

Однако, хотя дочерний объект в памяти корректно обновляется с такими вещами, как столбец идентификации PK, родительское поле Property остается пустым.Я был удивлен этим, это нормально?Как только запись создана, и я возвращаюсь в приложение, навигация к родителю всегда работает.Просто кажется, что сразу после создания дочернего элемента родительское свойство навигации не обновляется.

Я подумал, что, возможно, я мог бы тогда просто найти контекст для только что созданного дочернего элемента на основе возвращенного PK и получить полностьюзаполненный дочерний объект, но он не работает.Кажется, я просто возвращаю идентичный объект.Я думаю, что это просто поиск в локальном кэше и возвращение объекта, который у меня уже есть.Я заметил этот context.Child.Local, кажется, способ взглянуть только на локальное представление, но я не увидел аналога "store".

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

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

Child child = GetChildFromSomewhere();
Parent parent = GetParentFromSomewhere();

// Don't do this
child.ParentId = parent.ParentId;

// Use this instead
child.Parent = parent;

Вам не нужно напрямую нажимать клавишу.При таком изменении ассоциации ключ будет обновлен в установленном порядке.

Если вы измените ключ напрямую, ссылка на объект не будет автоматически обновлена ​​(контекст не переходит к поиску подходящего Parent идобавьте ссылку, пока вы не сохраните или не синхронизируете с базой данных).

Если вы измените объект , ключ будет обновлен, когда это необходимо.Но опять же, вы не должны обращаться непосредственно к ключу.EF работает с объектными отношениями, а не с ключом-ключом.

1 голос
/ 16 ноября 2011

Вы пытались добавить дочерний объект непосредственно в дочерний объект родительского объекта EntityCollection, а не в Context ObjectSet?Это также добавит его в Context ObjectSet, так что вы избежите проблемы с самого начала.

1 голос
/ 16 ноября 2011

Ваш PK не будет правильно настроен, пока вы не создадите новый Контекст. Вы должны располагать и воссоздавать свой контекст после каждого SaveChange ().

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