【问题标题】:How can I define a stored procedure in Entity Framework (code first)?如何在实体框架中定义存储过程(代码优先)?
【发布时间】:2012-01-10 19:39:49
【问题描述】:

我在 Entity Framework 中定义了我的模型(代码优先),但是如何在我的模型中定义一个存储过程?当我的数据库从我的模型生成时,我想创建我的模型并让它在我的数据库中生成存储过程。

【问题讨论】:

  • 我想从我的 Store 过程中定义一个模型。当我第一次使用我的模型时,Entity 在 SQL 服务器中生成我的 Store 过程。
  • 这个相关问题有帮助吗? stackoverflow.com/questions/4845246/…

标签: entity-framework entity-framework-4.1


【解决方案1】:

说明

目前在 Entity Framework 代码中首先没有对存储过程的内置直接映射支持。但是您可以像我的示例中那样执行任何 sql 查询(创建您的存储过程)。

样本

public class MyDatabaseContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        DbCommand cmd = Database.Connection.CreateCommand();
        cmd.CommandText = "create stored procedure ....";
        cmd.ExecuteNonQuery();
    }   
}

更多信息

【讨论】:

  • 你的回答对我很有用。
  • 很高兴为您提供帮助,谢谢!祝你有美好的一天!
  • 我收到以下错误:ExecuteNonQuery 需要一个打开且可用的连接。连接的当前状态为关闭。
【解决方案2】:

我使用的是 Entity Framework 6,所以事情可能已经改变。数据库不是在 OnModelCreating 中创建的,但它确实在 DbInitializer 中像这样工作......

public class MyDbInitializer : DropCreateDatabaseIfModelChanges<MyDbContext> {
    protected override void Seed(MyDbContext context) {
        string sql = @"CREATE PROCEDURE...";
        context.Database.ExecuteSqlCommand(sql);

        base.Seed(context);
    }
}

【讨论】:

  • 迁移是否会跟踪以这种方式创建的存储过程的更改?
  • @Craig,我想是的。我没有测试它。
猜你喜欢
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多