【发布时间】:2014-11-26 14:55:36
【问题描述】:
我有如下分层:
UI - Web App => 参考 BLL 和 实体
BLL - 业务逻辑(验证)=> 参考 DAL 和 实体
实体 - 数据载体 (POCO) => 无参考
DAL - 数据上下文 EDMX => 无参考
我有一个非常基本的问题,因为这是我的第一个绝对隔离项目。 如果我想在 UI 级别设置我的对象的 EntityState (Added/Modified/Deleted),我该怎么做。因为使用上述结构,我将无法访问 DataContext。
因为据我所知设置实体状态,数据上下文是一项任务。
我已经阅读了很多关于 SO 的问题,但没有人能澄清这个疑问。我知道另一种方法是维护自定义 State 属性@实体级别。
我已阅读数据上下文应限制为 DAL。将 EntityState 设置为 @BLL/UI 是一种不好的做法吗?
我是这种架构的 EF 新手。请帮忙。
我已经完成了以下 So 问题但没有弄清楚,可能是由于我对 SOC 缺乏了解:
1.Which layer should create DataContext?
2.Why DbContext object shouldn't be referred in Service Layer?
4.Entity Framework and layer separation
4.How to update entities which are modified outside the DbContext?
编辑 1: 我仍然关心的一件事是在 DAL 中再次循环遍历对象层次结构,只是为了设置它们的 EntityState。我有一个非常嵌套的层次结构。如果我必须在平面结构中做同样的事情,我将不得不在填充对象的 UI 中设置一次,然后可以调用 context.savechanges()。
但在这里我为实体创建了一个虚拟状态属性,我可以设置@UI,然后将其转换为EntityState.Modified @DAL。这是一个正确的方法吗?
【问题讨论】:
-
我不明白为什么需要在 UI 中设置实体状态?你这是什么意思?
-
@SOfanatic 假设我有一个表示实体的网格,并且我修改了第二行数据。我必须将其标记为脏(已修改),以便我的上下文知道该实体必须更新..正确的?我可能错了,因为我对 EF 的经验非常有限
-
我想这是处理它的一种方法......但不确定它是否是最好的方法。需要明确的是,您的网格是实体的集合,而不仅仅是一个实体,对吧?
-
@SOfanatic - 是的集合实体。我的表单包含具有嵌套层次结构(1 到多个)的多个实体的数据..所以我必须更新/添加/删除整个层次结构基于数据用户已选择。还有哪些其他处理方式,任何链接引用都会有很大帮助
-
我没有任何链接,但更好的方法是进行 ajax 调用?可能使用客户端 MVVM 框架(如 knockout.js)
标签: entity-framework entity-framework-6 data-access-layer bll