1

我有如下分层:

UI - Web App => 引用 BLL 和实体

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

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

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

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

因为据我所知设置实体状态,数据上下文是一项任务。

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

我已经读过 datacontext 应该限于 DAL。将 EntityState 设置为 @BLL/UI 是一种不好的做法吗?

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

我已经经历了以下So问题但没有弄清楚,可能是由于我对SOC缺乏了解:

1.哪一层应该创建DataContext?

2.为什么服务层不应该引用 DbContext 对象?

3.如果 Entity Framework / DbContext 是 DAL / Repository,它在 3 层架构中的位置是什么?

4.实体框架和层分离

4.如何更新在 DbContext 之外修改的实体?

编辑 1: 我仍然关心的一件事是在 DAL 中再次循环遍历对象层次结构,只是为了设置它们的 EntityState。我有一个非常嵌套的层次结构。如果我必须在平面结构中做同样的事情,我将不得不在填充对象的 UI 中设置一次,然后可以调用 context.savechanges()。

但是在这里我为实体创建了一个虚拟状态属性,我可以设置@UI,然后将其转换为EntityState.Modified @DAL。这是一个正确的方法吗?

4

1 回答 1

2

只有您DAL应该有权访问您的DataContext(间接)。DataContext应该由ContextFactory插入到您的BaseRepository. 在你的工厂类的某个地方,你应该有一个方法来检索DataContext

public DataContext Get()
{
    return _dataContext ?? (dataContext = new DataContext());
}

假设在您的存储库中,您有一个Update(T entity)方法,那么这就是您处理状态的地方:

public void Update(T entity)
{
    _dataContext.Entry(entity).State = EntityState.Modified;
}
于 2014-10-01T18:17:45.830 回答