如何/应该 - 在UI / BL层中设置EntityState?

时间:2014-10-01 17:19:20

标签: entity-framework entity-framework-6 data-access-layer bll

我对图层进行了隔离,如下所示:

  

UI - Web App =>参考文献BLL和   实体

     

BLL - 业务逻辑(验证)=>参考DAL和   实体

     

实体 - 数据载体(POCO)=>没有参考

     

DAL - 数据上下文EDMX =>没有参考

我有一个非常基本的问题,因为这是我的第一个绝对隔离项目。 如果我想设置我的对象@ UI级别的EntityState(添加/修改/删除),我该怎么做。因为使用上述结构,我将无法访问 DataContext

因为我知道要设置实体状态,所以数据上下文是一项授权。

我已经阅读了很多关于SO的问题,但没有人对这个疑问有所澄清。我知道另一种方法是维护自定义State属性@ Entities级别。

我已经读过datacontext应该限于DAL。将EntityState设置为@ BLL / UI?

是不好的做法

我是这种架构的EF新手。请帮助。

我已经完成了以下所有问题,但没有明确,可能是由于我对SOC缺乏了解:

1。Which layer should create DataContext?

2。Why DbContext object shouldn't be referred in Service Layer?

3。If Entity Framework / DbContext is the DAL / Repository, where does it fit within 3-tier architecture?

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。这是一种正确的方法吗?

1 个答案:

答案 0 :(得分:2)

只有您的DAL才能访问DataContext(间接)。 DataContext应由插入ContextFactory的{​​{1}}创建/检索。在工厂类的某个地方,您应该有一个方法来检索BaseRepository

DataContext

假设您的存储库中有public DataContext Get() { return _dataContext ?? (dataContext = new DataContext()); } 方法,那么就是处理状态的地方:

Update(T entity)