В настоящее время я создаю приложение с высокой степенью модуляции (с использованием Prism-Framework) и доступ к базе данных через EntityFramework, реализованный в CodeFirst.
Моя цель — отделить фактическую запись данных в базу данных от «нормального» использования созданных сущностей. Запись в базу данных должна выполняться только основным приложением, но модули должны по-прежнему иметь возможность использовать классы сущностей.
Таким образом, они должны знать DataContext или, по крайней мере, Entiy Classes. Вот проблема, однако: если модуль изменяет свойство класса сущностей, а основное приложение вызывает «SaveChanges()» в DataContext по какой-либо другой причине, изменения, сделанные модулем, автоматически сохраняются в базе данных без main-Application имеет контроль над ним.
Как я могу предотвратить такое поведение? Модули не должны иметь возможности изменять содержимое базы данных, кроме как через определенный интерфейс к основному приложению.
Моя первая мысль заключалась в том, чтобы реализовать ICloneable в каждом классе сущностей и передавать только клоны объектов сущностей в модули для работы. Затем модули, если они хотят запросить изменение в базе данных, передают клонированные объекты в основное приложение, которое обновляет исходный объект и вызывает «SaveChanges()» в DataContext.
Ребята, как вы думаете, это жизнеспособное решение, или может быть лучший способ реализовать это поведение?
Заранее спасибо!