【发布时间】:2010-08-30 12:08:02
【问题描述】:
我想使用一个参数执行存储过程,该参数使用 EF4“代码优先”返回表。出于这个目的,我可以使用一些 DTO,它不必返回实体。我尝试过:
a) 使用函数导入创建 edmx 文件并将其添加到我的 ObjectContext 中,如下所示:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.RegisterEdmx("Model.edmx");
}
但我收到InvalidOperationException 说“在使用 fluent API 开始代码优先配置后无法使用现有模型的注册。”
b) 访问底层连接并执行程序:
var connection = this.objectContext.UnderlyingContext.Connection;
connection.Open();
DbCommand command = connection.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "booklog.Recommendations";
command.Parameters.Add(
new EntityParameter("userId", DbType.Guid) { Value = this.userId });
var reader = command.ExecuteReader();
// etc.
在哪里
public class MyObjectContext : DbContext
{
public System.Data.Objects.ObjectContext UnderlyingContext
{
get { return this.ObjectContext; }
}
// ....
}
但这种方法也不起作用。它抛出 InvalidOperationException 并显示消息“在当前工作区中找不到为 FunctionImport 指定的容器 'booklog'。”
【问题讨论】:
-
在 EF 4 Code First CTP 5 中,
DbContext中没有ObjectContext属性。相反,请使用Database属性。
标签: .net entity-framework stored-procedures code-first