我有如下分层:
UI-Web App=>参考BLL和实体
BLL-业务逻辑(验证)=>参考DAL和实体
实体-数据载体(POCO)=>无参考
DAL-数据上下文EDMX=>无参考
我有一个非常基本的问题,因为这是我第一个完全隔离的项目。如果我想在UI级别设置我的对象的EntityState(添加/修改/删除),我该怎么做。因为使用上述结构,我将无法访问DataContext。
因为据我所知,要设置实体状态,数据上下文是一项任务。
我读过很多关于SO的问题,但没有一个能澄清这个疑问。我知道另一种方法是维护一个自定义的State属性@Entities级别。
我已经读到数据上下文应该限制为DAL。将EntityState设置为@BLL/UI是否是一种糟糕的做法?
我是EF的新手,有这种架构。请帮忙。
我已经经历了以下问题,但没有弄清楚,可能是因为我对SOC缺乏了解:
1.哪个层应该创建DataContext?
2.为什么DbContext对象不应该在服务层中引用?
3.如果实体框架/DbContext是DAL/Repository,那么它在三层架构中适合哪里?
4.实体框架和分层
4.如何更新在DbContext之外修改的实体?
第1版:我仍然担心的一件事是在DAL中再次循环对象层次结构,只是为了设置它们的EntityState。如果我必须在平面结构中执行同样的操作,我必须在填充对象的UI中设置一次,然后才能调用context.savechanges().
但在这里,我为实体创建了一个伪状态属性,我可以设置@UI,然后将其转换为EntityState.Modified@DAL。这是正确的做法吗?
只有您的DAL
才能(间接)访问DataContext
。DataContext
应由插入到BaseRepository
中的ContextFactory
创建/检索。在工厂类的某个地方,应该有一个检索DataContext
:的方法
public DataContext Get()
{
return _dataContext ?? (dataContext = new DataContext());
}
假设在您的存储库中有一个Update(T entity)
方法,那么这就是处理状态的地方:
public void Update(T entity)
{
_dataContext.Entry(entity).State = EntityState.Modified;
}