【发布时间】:2013-12-10 08:57:16
【问题描述】:
最近我问了一个问题(CRUD operations with connected POCOs instead of disconnected POCOs in EF code first),基于这个问题和这个评论(CRUD operations with connected POCOs instead of disconnected POCOs in EF code first),现在我想在我的项目中使用连接的POCOs,所以我还有一个问题。
但我认为,如果我使用视图模型,当我使用DbContext 的实例从数据库中获取我的数据并将它们映射到视图时,当我想要持久化用户更改时,DbContext(获取的数据)现在不存在(因为例如,当我从我的 DAL 调用 GetOrders() 时,DbContext 创建然后处置),所以我应该在客户端管理我的 POCOs 状态并将它们复制回新创建的DbContext(在我的 DAL 的 SaveOrder() 中)。
我说的对吗?
【问题讨论】:
-
你是对的。您处于“MVC 范例”中:视图是 winform 和控制器,在功能上等同于 Web 服务器,通过 DTO 从单独的程序集调用。 (尽可能多地)。控制器是 DAL 和域(即业务逻辑)之间的链接,域本身就是另一个程序集。组装分离不是必需的,但它可以帮助保持良好状态。 (这里的好可能是主观的)
-
@tschmit007 那么我该如何解决这个问题呢?(失去连接的实体状态)
-
通常我给我的表单一个connectionString作为属性。形成连接字符串,您可以做任何事情,包括实例化上下文。对于状态,就像您在网络环境中所做的一样。
-
@tschmit007:但我认为这不是个好主意,因为违反了 SOC。(将 DAL 与 UI 混合使用)
-
对,这就是 UI 实例化一个存储库(即接口的具体实现)的原因,它公开了一些访问方法。存储库从通过表单或任何注入方法获得的连接字符串构建上下文 (DAL)。所以表单(UI)使用了一个接口,而忽略了接口的实现。
标签: c# winforms entity-framework poco dbcontext