首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >先使用实体框架代码创建存储过程吗?

先使用实体框架代码创建存储过程吗?
EN

Stack Overflow用户
提问于 2013-12-21 12:08:28
回答 4查看 36.6K关注 0票数 30

在我当前的项目中,我首先使用了实体框架代码。数据库由许多表、许多视图和许多函数组成。我可以先使用实体框架代码创建表。但是我无法找到一种首先使用实体框架代码创建存储过程的方法。我知道Database-First策略可以满足我的需求,而且一切运行良好,但我不想在现有的项目代码中使用Database-First策略。

请帮帮我,使用实体框架代码优先策略创建存储过程的最好方法是什么?

EN

回答 4

Stack Overflow用户

发布于 2016-06-16 23:00:07

除了使用StringBuilder,您还可以使用现有的EF方法

代码语言:javascript
复制
public override void Up() 
{
  CreateStoredProcedure(
    "MyStoredProcedure",
    p => new
    {
        id = p.Int()
    },
    @"SELECT some-data FROM my-table WHERE id = @id"
  );
}

public override void Down() 
{
  DropStoredProcedure("MyStoredProcedure");
}
票数 31
EN

Stack Overflow用户

发布于 2015-11-23 08:30:08

有了Code First,您总是可以进行迁移。迁移继承自DbMigration对象,它有一个非常有用的方法:

DbMigration.Sql(字符串)

以下是步骤:

1)从NuGet包管理器中打开包管理器控制台

2)类型添加-迁移CreateHelloWorldStoredProcedureExample

3) Visual Studio将显示一个新类,其中包含两个空方法: Up和Down

4)在Up方法中,编写你的代码,下面是一个例子

代码语言:javascript
复制
 public override void Up()
 {
        StringBuilder storedProcedureCode = new StringBuilder();

        storedProcedureCode.Append("CREATE PROCEDURE dbo.HelloWorld" + Environment.NewLine);
        storedProcedureCode.Append("AS" + Environment.NewLine);
        storedProcedureCode.Append("BEGIN" + Environment.NewLine);
        storedProcedureCode.Append(@"SELECT 'Hello World'" + Environment.NewLine);
        storedProcedureCode.Append("END" + Environment.NewLine);

        this.Sql(storedProcedureCode.ToString());
}

在Down方法中:

代码语言:javascript
复制
public override void Down()
    {
        this.Sql("DROP PROCEDURE dbo.HelloWorld ");
    }

在此之后,只需运行update-database就可以了!

注意:如果您使用SQL Server,请避免使用GO语句。

票数 18
EN

Stack Overflow用户

发布于 2018-08-24 13:41:52

如果您使用的是EF Core 2.1,您可以这样创建存储过程:

代码语言:javascript
复制
public partial class AddStoredProcedure : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.Sql(@"your create procedure statement");
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.Sql(@"your drop procedure statement");
    }
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20715292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档