sql-server - Entity Framework CTP5 - 如何调用存储过程?

标签 sql-server entity-framework stored-procedures code-first entity-framework-ctp5

这可能是一个简单的答案,但我看不到如何使用 EF CTP5 执行存储过程。

在 Entity Framework 4.0 中,我们这样做了:

ExecuteFunction("ContainerName.StoredProcName", new ObjectParameter("Id", id))

这是ObjectContext上的一个方法。

但是DbContext没有这样的方法。

我们如何调用存储过程? EF CTP5 不支持吗?

编辑:

我找到了this thread ,其中指出您需要执行此操作:

  var people = context.People.SqlQuery("EXECUTE [dbo].[GetAllPeople]");

这引起了一些担忧:

1) 您现在正在集合上调用存储过程,而不是上下文。存储过程应该在上下文范围内可用,而不是绑定(bind)到特定的实体集。就像 SQL Server 中它们位于“数据库”下,而不是“表”下一样。

2)复杂类型怎么样?我以前有一个从存储过程返回的复杂类型。但现在,看起来好像你必须直接映射到一个实体?这没有任何意义。我有许多存储过程返回一个不直接由 ObjectSet/DBSet 表示的类型,我不知道如何将其拉过来。

希望有人能为我解决这个问题,因为据我所知,我将无法升级到 CTP5。

最佳答案

您可以像这样执行数据库范围的sql语句

using(var context = new MyContext())
{
    // custum sql statement
    var c = context.Database.SqlQuery<int>("SELECT COUNT(*) FROM Employees");

    // returned entity type doesn't have to be represented by ObjectSet/DBSet
    var e = context.Database.SqlQuery<Employee>("SELECT * FROM Employees");

    // stored procedure
    var q = context.Database.SqlQuery<Employee>("GetEmployees");
}

关于sql-server - Entity Framework CTP5 - 如何调用存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4789788/

相关文章:

c# - 我可以重用代码来为 EF Core 的子属性选择自定义 DTO 对象吗?

c# - 如何使用 Entity Framework 4 为多语言数据库中的 POCO 对象建模?

Mysql 创建或更新锁

mysql - FireDac MySql Connector.ExecSql 无法工作

mysql - 将数据复制到另一个数据库后删除数据

SQL Server - 使用子查询帮助删除具有多个 where 子句的行

sql - SQL Server 上的 varbinary 到 string

sql - 如何在 SQL Server 中创建参数化 XPath 查询?

sql-server - 我怎样才能对我的用户锁定我的 MS-SQL 数据库,但仍然可以通过 ODBC Access 它?

c# - 使用 Entity Framework 在 sql server 中加密/解密列