分层架构中的ASP.NET和Entity Framework - 仅使用Entity Framework进行ORM

30

我有一个使用分层架构的ASP.NET应用程序,例如:表示层、业务逻辑层和数据访问层。

我不希望业务层需要知道数据访问层的实现方式,并且我也不想直接使用EntityDataSource或其他数据控件来绑定实体。因此,我希望使用存储库模式的场景)

我只是想将ENTITY FRAMEWORK作为ORM工具来生成类。 我知道如何做到这一点。我不清楚的是:

  1. 是否建议将这些类传播到应用程序中的所有层,以便业务逻辑层处理由Entity Framework直接创建的部分类(例如,如果我在SQL中有一个客户表,则实体框架将创建一个Customer类,该类可以潜在地在我的应用程序的所有层中直接使用)
  2. 如果我的BLL调用多个不同的实体类但希望将其视为一个事务,则如何管理事务支持
6个回答

9
  1. 如果你是实际操作者:是的!使用ORM可以避免重复映射和由重复映射产生的潜在错误。(通过重复映射我指的是DB -> ORM和ORM -> 业务逻辑)。
  2. 使用TransactionScope。这是一种最好的处理事务的方式,不用担心嵌套事务。

3

2

另一种方法是使用映射器类,将EF纯粹用作数据访问,并仅在DAL中使用EF生成的类,然后通过映射器将这些DAL对象映射到BLL的对象。对我们来说,这种方法很有效。


1
现在通过新的EF4,您还可以使用POCO类,从而消除在层之间映射实体的额外负担。在我们的应用中,我们使用EF4,并在视图以外的整个应用程序中使用业务实体,这需要视图模型。这大大提高了性能。

0

虽然我没有使用实体框架,但我曾尝试在数据访问层(使用数据访问应用程序块3.1)中分别执行两个插入存储过程的示例,并将其包装在Service/BLL中的TransactionScope上下文中,但它并没有成功。其中一个插入操作成功了,而另一个失败了,但数据已经提交。

你自己有成功做到这一点吗?


0
即使您使用生成的 POCO 类,就像其他操作建议的那样,您仍然必须维护对实体框架的某种依赖性:发送到 DbContext/ObjectContext 的查询。因此,您应该考虑将查询封装在存储库中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接