我对图层进行了隔离,如下所示:
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?
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。这是一种正确的方法吗?
答案 0 :(得分:2)
只有您的DAL
才能访问DataContext
(间接)。 DataContext
应由插入ContextFactory
的{{1}}创建/检索。在工厂类的某个地方,您应该有一个方法来检索BaseRepository
:
DataContext
假设您的存储库中有public DataContext Get()
{
return _dataContext ?? (dataContext = new DataContext());
}
方法,那么就是处理状态的地方:
Update(T entity)