如何在实体框架中定义存储过程(代码优先)?
Posted
技术标签:
【中文标题】如何在实体框架中定义存储过程(代码优先)?【英文标题】:How can I define a stored procedure in Entity Framework (code first)? 【发布时间】:2012-01-10 19:39:49 【问题描述】:我在 Entity Framework 中定义了我的模型(代码优先),但是如何在我的模型中定义一个存储过程?当我的数据库从我的模型生成时,我想创建我的模型并让它在我的数据库中生成存储过程。
【问题讨论】:
我想从我的 Store 过程中定义一个模型。当我第一次使用我的模型时,Entity 在 SQL 服务器中生成我的 Store 过程。 这个相关问题有帮助吗? ***.com/questions/4845246/… 【参考方案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();
更多信息
MSDN - DbCommand Class【讨论】:
你的回答对我很有用。 很高兴为您提供帮助,谢谢!祝你有美好的一天! 我收到以下错误: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,我想是的。我没有测试它。以上是关于如何在实体框架中定义存储过程(代码优先)?的主要内容,如果未能解决你的问题,请参考以下文章