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