В проекте EF 6 я пишу функции проверки для объектов. некоторые из них являются статическими, а другие - экземплярами самих сущностей.Определите, был ли установлен контекст прокси-объекта объекта
Игнорируя, является ли это плохой практикой или нет, я хотел бы проверить, были ли сущности созданы с использованием контекста, и если да, то они все еще привязаны.
Обратите внимание: эти функции НЕ имеют доступа к объекту контекста, а только к классам сущностей.
В качестве примера, метод проверяет достоверность сущности и каскадов на все связанные Department.Employee
объекты Department
.
- Если иерархия была создана вручную, проверка будет успешной.
- Если иерархия была создана с использованием контекста, который все еще жив, проверка будет успешной, хотя и медленнее.
- Если иерархия была создана с использованием контекста, который был удален, проверка завершится неудачей с помощью
ObjectDisposedException
(при условии, что создание прокси было включено и.Include(***)
не был использован).
Итак, вопрос, можно ли выявить вышеуказанные сценарии без доступа к экземпляру DbContext
? Если нет, то как мы можем лучше всего проверить целые иерархии независимо от того, как они были созданы.
var result = true;
var departments = ???; // Constructed manually or through a DbContext instance.
foreach (var department in departments)
{
result &= department.Validate();
foreach (var employee in department.Employees)
{
result &= employee.Validate();
}
}
EDIT: Пожалуйста, обратите внимание, что это для настольного приложения, которое не может иметь длительные DbContext
экземпляров. они почти всегда удаляются сразу после получения данных. Повторный запрос к базе данных не кажется жизнеспособным вариантом для проверки, поскольку он запускается тривиальным пользовательским вводом и замедляет работу всего пользователя.
Я бы посоветовал использовать двоичные операторы на bools. Они могут иметь удивительные эффекты, такие как два истинных значения в сочетании с ложным. – usr