【问题标题】:How to / Should one - set EntityState in UI/BL Layer?如何/应该在 UI/BL 层中设置 EntityState?
【发布时间】:2014-11-26 14:55:36
【问题描述】:

我有如下分层:

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

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

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

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

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

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

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

我已阅读数据上下文应限制为 DAL。将 EntityState 设置为 @BLL/UI 是一种不好的做法吗?

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

我已经完成了以下 So 问题但没有弄清楚,可能是由于我对 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。这是一个正确的方法吗?

【问题讨论】:

  • 我不明白为什么需要在 UI 中设置实体状态?你这是什么意思?
  • @SOfanatic 假设我有一个表示实体的网格,并且我修改了第二行数据。我必须将其标记为脏(已修改),以便我的上下文知道该实体必须更新..正确的?我可能错了,因为我对 EF 的经验非常有限
  • 我想这是处理它的一种方法......但不确定它是否是最好的方法。需要明确的是,您的网格是实体的集合,而不仅仅是一个实体,对吧?
  • @SOfanatic - 是的集合实体。我的表单包含具有嵌套层次结构(1 到多个)的多个实体的数据..所以我必须更新/添加/删除整个层次结构基于数据用户已选择。还有哪些其他处理方式,任何链接引用都会有很大帮助
  • 我没有任何链接,但更好的方法是进行 ajax 调用?可能使用客户端 MVVM 框架(如 knockout.js)

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


【解决方案1】:

只有您的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;
}

【讨论】:

  • 这帮助我解决了数据上下文的多个实例的另一个问题。请检查我的问题的编辑 1。
猜你喜欢
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多