Entity framework 仅包含存储过程的实体框架

Entity framework 仅包含存储过程的实体框架,entity-framework,stored-procedures,Entity Framework,Stored Procedures,我对在我们的场景中仅对存储过程使用实体框架的合理性有一个疑问 我们计划有一个N层架构,包括UI、BusinessLayer(BLL)、DataAccessLayer(DAL)和BusinessObjectDefinitions(BOD)层。BOD层为所有其他层所知,DAL中执行查询的结果应在传递到BLL之前转换为对象(在BOD中定义) 我们将只对所有CRUD方法使用存储过程。 因此,对于select存储过程,我们将添加一个函数导入,创建一个复杂类型,当我们执行该函数时,我们将复杂类型的值转换为一

我对在我们的场景中仅对存储过程使用实体框架的合理性有一个疑问

我们计划有一个N层架构,包括UI、BusinessLayer(BLL)、DataAccessLayer(DAL)和BusinessObjectDefinitions(BOD)层。BOD层为所有其他层所知,DAL中执行查询的结果应在传递到BLL之前转换为对象(在BOD中定义)

我们将只对所有CRUD方法使用存储过程。 因此,对于select存储过程,我们将添加一个函数导入,创建一个复杂类型,当我们执行该函数时,我们将复杂类型的值转换为一个BOD类,并将其传递给BLL。 因此,基本上,我们在模型中没有实体,只有复杂类型,可以转换为业务对象

“我不确定这一切是否有意义,因为在我看来,我们失去了很多好处,”英孚提供


还是我完全错了?

如果我只使用存储过程,我不会使用EF

就我个人而言,我会看一些类似PetaPoco的东西,大型的甚至是纯Ado.Net

编辑

下面是PetaPoco使用SP并输出自定义类型的示例


我同意,如果所有CRUD方法都依赖于存储过程,那么就没有必要使用EF。

我不同意这里现有的两个答案。Petapoco很棒,但我认为EF仍然有很多优势

Petapoco在执行读取单个实体或实体列表的简单存储过程方面非常有效(可能甚至比EF更好)。然而,一旦你阅读了数据并需要开始修改它,我觉得这就是EF显然是赢家的地方

要使用petapoco插入/更新数据,您需要使用以下命令手动调用插入/更新存储过程:

db.Execute("EXEC spName @param1 = 1, @param2 = 2")
当insert/update存储过程插入多个列的行时,手动构造存储过程调用并声明所有参数会很快变老。当调用实现乐观并发的更新存储过程(即,将原始值作为参数传递)时,情况会变得更糟

您还可能在内嵌存储过程调用中出错,这很可能要到运行时才会被捕获

现在将其与实体框架进行比较:在EF中,我只需将存储过程映射到edmx中的实体。由于实体框架工具将通过分析我的存储过程自动生成映射,因此键入错误的风险较小

实体框架还将处理乐观并发,而不会出现任何问题。最后,当需要保存更改时,唯一的步骤是调用:

entities.SaveChanges()

我使用EF将存储过程调用映射为DAL。它通过映射函数来节省编写DAL的时间。我们不太使用LINQ to SQL,因为我们的DBA不希望直接访问数据表。

这种方法对您有何帮助?我也有同样的想法,只是想确定在创建存储过程、从EF调用它们时,是否有任何特定的场景需要记住。如果有任何建议,我将不胜感激!