1

我需要检索大量实体图,在 UI 中对其进行操作(添加、更新、删除),然后将其全部保存回数据库。在各种 SO 问题和实验之后,我发现这种大规模的“分离图更新”方法非常有问题,所以我现在正在重新考虑我的方法。

它只是一个 2 层 WPF 应用程序,所以我现在正在考虑在用于操作实体图的 UI 期间存在一个长期运行的上下文 - 这样它就可以自动跟踪更改。但是我不确定如何在架构上解决这个问题。

该应用程序当前具有三个项目 - UI、业务层和一个用于 edmx 和生成的实体的项目。我的业务层有一个CustomerManager类,它公开了一个检索客户图(订单、订单行等)的方法,以及一个持久化客户图的方法。假设 UI 保持CustomerManager类的相同实例,因此保持相同的上下文,将跟踪对图形的更改(添加和更改实体)。

删除实体有点棘手,因为必须使用上下文来执行此操作,即:-

context.Set<Order>().Remove(orderToDelete);

真的在寻找一些建筑方面的建议。我只是DeleteOrder在我的CustomerManager类中公开一个这样做的方法吗?鉴于我有十几种其他实体类型,我可能需要公开类似的方法来删除订单、产品等。

UI 保持同一个CustomerManager实例是一种明智的方法,还是有更好的方法来管理长期运行的上下文?该方法的逻辑位置DeleteOrder将在我的客户实体(部分)类中,但由于这些类与业务层(上下文所在的位置)位于单独的项目中,我想我不能这样做(除非我将上下文传递给 DeleteOrder 方法)?

4

1 回答 1

1

只有当您的上下文存在于 UI 中并且 UI 直接与数据库对话以获取和保存数据时,您的长期上下文想法才会起作用。在您的 UI 和上下文之间涉及 WCF 总是会导致序列化,并且会导致实体分离 = 不跟踪更改(除非您使用 STE)。在 WCF 服务中拥有长期存在的上下文太成问题了,而且通常是不好的做法。

您是否考虑过 WCF 数据服务?它们通过使用特殊的客户端上下文在某种程度上提供客户端跟踪。

于 2013-04-03T14:42:57.867 回答