EntityFramework — использование сущностей в модулях без доступа к базе данных

В настоящее время я создаю приложение с высокой степенью модуляции (с использованием Prism-Framework) и доступ к базе данных через EntityFramework, реализованный в CodeFirst.

Моя цель — отделить фактическую запись данных в базу данных от «нормального» использования созданных сущностей. Запись в базу данных должна выполняться только основным приложением, но модули должны по-прежнему иметь возможность использовать классы сущностей.

Таким образом, они должны знать DataContext или, по крайней мере, Entiy Classes. Вот проблема, однако: если модуль изменяет свойство класса сущностей, а основное приложение вызывает «SaveChanges()» в DataContext по какой-либо другой причине, изменения, сделанные модулем, автоматически сохраняются в базе данных без main-Application имеет контроль над ним.

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

Моя первая мысль заключалась в том, чтобы реализовать ICloneable в каждом классе сущностей и передавать только клоны объектов сущностей в модули для работы. Затем модули, если они хотят запросить изменение в базе данных, передают клонированные объекты в основное приложение, которое обновляет исходный объект и вызывает «SaveChanges()» в DataContext.

Ребята, как вы думаете, это жизнеспособное решение, или может быть лучший способ реализовать это поведение?

Заранее спасибо!


person BoltzmannBrain    schedule 02.05.2013    source источник


Ответы (1)


Используйте DbSet.AsNoTracking. () Метод для включения чтения данных из базы данных, которые не будут отслеживаться DbContext.

person qujck    schedule 02.05.2013
comment
Спасибо, я, пожалуй, пойду на это. - person BoltzmannBrain; 06.05.2013