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



我有如下分层:

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才能(间接)访问DataContextDataContext应由插入到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;
}

相关内容

  • 没有找到相关文章

最新更新