【问题标题】:mapping EF entities to BL objects将 EF 实体映射到 BL 对象
【发布时间】:2018-05-21 19:25:01
【问题描述】:

我首先在我的解决方案中使用 EF DB。

我有BLDALCommon 层。

BL 包含一个操纵业务模型的经理

Dal 进行 CRUD 操作

后者保留所有其他层使用的所有 DTO 和接口。

每个项目都引用Common 项目。

现在我想创建IDal 接口,它返回我的Business model 对象列表(EF 类型)

问题是 EF 类型是在 Dal 项目中定义的,并且这个引用 Common\IDal

因此 IDal 由于循环引用而无法引用 Dal。

我想将 EF 对象映射到 BL 对象,但是我怎样才能使它高效呢?

我有许多组合的Business model 对象。我不想复制它们。

对吗?

【问题讨论】:

  • 1.为什么要将 EF 实体映射到业务对象?您可以扩展实体,因为它们是部分类。您只需确保不在 linq-to-entities 查询中使用非映射属性。 2.这个IDal的作用我不清楚。它是某种存储库吗?
  • 我的 Dal 进行 CRUD 操作。作为一个好习惯,每个具体的类都应该被一个接口包裹起来,Dal : IDal

标签: c# .net entity-framework-4


【解决方案1】:

我认为 IDAL 应该在 Common 中或在 DAL 本身中。

当你想引用一个项目时,不需要创建很多项目。

如果您必须internal,您可以更改存储库的可见性,以便其他项目只能使用public 接口。

对于更多替代和不同的实现,我认为NSK Starter Kit 将是一个很好的参考。

更新 1:

结构如下:

  • 项目的中心部分 几乎包含你所有的纯业务是Domain
  • 下面有一个Data Access,它引用了Domain
  • 会有一个Data Access Common,其中包含Data Access Interfaces
  • 有一个Service 项目可能包含更复杂的操作,这些操作涉及多个聚合对象,它引用DomainData Access Interface
  • 有一个Service Interface,其中包含Service Interface and DTOs
  • 还有一个UI,它引用了Service Interface,可能还有Domain

你也可以在Cedar看看我自己制作的结构

【讨论】:

  • 我们创建了公共项目,所以当实现发生变化时,IDal 的所有 cnsumer 都不需要编译。这是松耦合
  • 是的,我知道,老兄,所以我没有正确理解这个问题,如果你的团队不够大,这种事情主要是仪式,无论如何让我更新答案。跨度>
  • 将业务对象与 DAL 混合将是最愚蠢的决定,那么 BL 项目包含什么?
猜你喜欢
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
相关资源
最近更新 更多