Я хочу выполнить хранимую процедуру с одним параметром, который возвращает таблицу, используя EF4 «Code First». Я в порядке с некоторыми DTO только для этой цели, он не должен возвращать объекты. Я пытался:
a) создайте файл edmx с функцией импорта и добавьте его в мой ObjectContext следующим образом:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.RegisterEdmx("Model.edmx");
}
, но я получил InvalidOperationException
, говоря: «Регистрация существующей модели не может быть использована после того, как началось конфигурирование кода с использованием свободного 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, не найден в текущем рабочем пространстве.»