【问题标题】:Entity Framework database first approach using stored procedures使用存储过程的实体框架数据库第一种方法
【发布时间】:2017-08-01 18:41:27
【问题描述】:

我正在寻找构建我的 MVC5 应用程序的数据访问层。在我们的项目中,我们将采用存储过程的数据库优先方法,因为团队更熟悉 SQL,并且希望通过存储过程执行所有 CRUD 操作。

我正在寻找展示这种方法实施的好例子。我想看看实体是如何映射的。因为这将是数据库中的存储过程被映射到.net 中的类。

【问题讨论】:

    标签: asp.net-mvc-5 entity-framework-6


    【解决方案1】:

    如果您打算使用 EF,我认为是时候让您的团队“熟悉”它了。使用存储过程执行每一个 CRUD 操作不是我要采取的路径。如果存储过程正在做一些简单的事情:

    Get the company record with ID 1
    

    然后我不会使用存储过程并使用 EF。对于更复杂的操作,可以使用存储过程。因此,您和您的团队可能希望通过团队工作会议来决定何时使用存储过程以及何时不使用。一旦你做出决定,整个团队都应该坚持这种方法。如果您需要更改它,请召开另一次会议并确保每个人都知道。一旦团队同意,每个人都必须遵循相同的模式。


    如何在 EF 中使用存储过程?

    我会从一个测试存储过程开始,看看整个事情是如何工作的。一旦您和您的团队确切了解该流程如何与 EF 一起使用,然后将设计、约定等放在一起,然后整个团队都应该遵循相同的模式。

    1. 编写一个返回结果集的测试存储过程。
    2. 通过从 Visual Studio 连接到数据库来创建 EDMX。
    3. 将存储过程添加到您的 EDMX。
    4. 使用模型浏览器添加Function Import。这将在您的上下文中创建一个方法,您可以像任何其他方法一样调用它,但在它下面将调用您的存储过程。有关如何执行此步骤的更多信息,请参阅this 答案。
    5. 第 4 步将根据存储过程的结果集创建一个类。

    注意

    您可能需要暂时将此标志设置为关闭,以便 EF 根据您的存储过程结果集创建复杂类型。

    SET FMTONLY OFF
    

    有关标志的更多信息,请参阅this 答案。

    【讨论】:

    • 我同意你的观点,使用存储过程的方法不是未来的方式,只是团队需要对存储过程进行更多控制,以便 sql 团队可以解决生产中出现的问题。他们还希望能够解决存储过程中的问题并进行部署,而不是接触代码库并进行部署。我实际上已经尝试过你建议的那个。直到创建函数导入的水平。我正在看一个如何在实体框架上创建包装器以及如何将存储过程自动映射到业务对象的示例
    • 抱歉,您在问题中没有提到您正在寻找包装器...也许您应该阅读this。此外,对于映射,您可以使用AutoMapper
    • 抱歉我的问题不清楚。我知道自动映射器并已映射到表。存储过程的映射是如何完成的
    • 你到底是什么意思?在我的回答中,我已经解释过 SP 将返回一个复杂的类实例。您将其映射到您的业务对象,就像任何其他对象一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多