Entity Framework - Удаленная связь все еще появляется во втором вызове - PullRequest
2 голосов
/ 22 декабря 2009

У нас работает длинный контекст структуры сущности (не спрашивайте, почему ...) с запросом, который извлекает сущность пользователя с ее ассоциациями:

var user = entities.UserSet.Include("UserAddresses")
                   .Where(u => u.Id == 1).FirstOrDefault();

Если строка адреса пользователя удаляется из базы данных (другим процессом), и мы снова запускаем этот запрос, мы все равно получим удаленную строку, даже если мы устанавливаем MergeOption перед вызовом (для зайдите в базу данных в любом случае и не используйте кеш):

(пробовал любой набор в запросе, но безуспешно)

entities.UserSet.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;
entities.UserAddress.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;
entities.UserSet.Include("UserAddresses").MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;

Может кто-нибудь помочь с этим вопросом?

Ответы [ 2 ]

2 голосов
/ 22 декабря 2009

Нет опции, которая автоматически удаляла бы элемент в памяти, которого нет на диске.

http://blog.dynatrace.com/2009/03/11/adonet-entity-framework-unexpected-behaviour-with-mergeoptions/

Вы можете очистить весь контекст, но это, вероятно, вызовет другие проблемы.

По сути, EF не работает хорошо в длительных контекстах, возможно, вам быстрее будет решить проблему и получить более стабильную систему, удалив долгосрочные контексты.

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

Вы получили .SaveChanges () перед выбором после удаления. Другого пути нет.

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