0

我目前正在创建一个高度模块化的应用程序(使用 Prism-Framework)并通过在 CodeFirst 中实现的 EntityFramework 访问数据库。

我的目标是将数据的实际写入数据库与创建实体的“正常”使用分开。写入数据库只能由主应用程序完成,但模块仍应能够使用实体类。

因此,他们必须知道 DataContext 或至少知道实体类。但问题是:如果模块更改了实体类的属性并且主应用程序出于某种其他原因在 DataContext 上调用“SaveChanges()”,则模块所做的更改会自动保存到数据库中,而无需主应用程序可以控制它。

我怎样才能防止这种行为?模块必须不能更改数据库内容,除非通过定义的接口连接到主应用程序。

我的第一个想法是在每个实体类中实现 ICloneable,并且只将实体对象的克隆传递给要使用的模块。然后,如果模块想要在数据库中请求更改,则将克隆的对象传递给主应用程序,主应用程序更新原始对象并在 DataContext 上调用“SaveChanges()”。

你们认为这是一个可行的解决方案,还是有更好的方法来实现这种行为?

提前致谢!

4

1 回答 1

1

使用DbSet.AsNoTracking() 方法启用从数据库中读取不会被 DbContext 跟踪的数据。

于 2013-05-02T09:22:09.977 回答