我目前正在创建一个高度模块化的应用程序(使用 Prism-Framework)并通过在 CodeFirst 中实现的 EntityFramework 访问数据库。
我的目标是将数据的实际写入数据库与创建实体的“正常”使用分开。写入数据库只能由主应用程序完成,但模块仍应能够使用实体类。
因此,他们必须知道 DataContext 或至少知道实体类。但问题是:如果模块更改了实体类的属性并且主应用程序出于某种其他原因在 DataContext 上调用“SaveChanges()”,则模块所做的更改会自动保存到数据库中,而无需主应用程序可以控制它。
我怎样才能防止这种行为?模块必须不能更改数据库内容,除非通过定义的接口连接到主应用程序。
我的第一个想法是在每个实体类中实现 ICloneable,并且只将实体对象的克隆传递给要使用的模块。然后,如果模块想要在数据库中请求更改,则将克隆的对象传递给主应用程序,主应用程序更新原始对象并在 DataContext 上调用“SaveChanges()”。
你们认为这是一个可行的解决方案,还是有更好的方法来实现这种行为?
提前致谢!