Как использовать Entity Framework с хранимыми процедурами и POCO - PullRequest
1 голос
/ 01 декабря 2011

Я пытаюсь использовать Entity Framework с хранимыми процедурами и POCOS и двумя различными проектами.

У меня есть один проект DataAccess (для моих edmx и DataContexts) и один проект BusinessEntities (для моих POCO).
DataAccess имеет ссылку на BusinessEntities.

В моей БД у меня есть довольно стандартный SP:

CREATE STORED PROCEDURE GetHeader
    @id CHAR(35)
AS
BEGIN
    SELECT ID, Name FROM mytable WHERE ID = @id
END

Текст данных:

public class DbContext : ObjectContext
{
public ObjectResult<BusinessEntities.GetHeaderResult> GetHeader(string id)
{
return base.ExecuteFunction<BusinessEntities.GetHeaderResult>("GetHeader", new ObjectParameter("id", id));
}
}

Если я толькопойти так (EDMX был обновлен с SP, но функция не была импортирована) У меня есть эта ошибка:

System.InvalidOperationException: The FunctionImport &#39;GetHeader&#39; could not be found in the container &#39;DbEntities&#39;.

Если я импортирую функцию правильно, у меня появляется эта ошибка:

System.InvalidOperationException: параметр типа «BusinessEntites.GetHeaderResult» в ExecuteFunction несовместим с типом «DbModel.GetHeaderResult», возвращаемым функцией.

Я полагаю, что здесь отсутствует только простая настройка, но я не могу ее захватить.

Обратите внимание, что файл EDMX имеет правильную настройку (CodeGenerationStrategy имеет значениенет, CustomTool пуст)

1 Ответ

6 голосов
/ 01 декабря 2011

В первом случае вы вызываете неправильный метод в контексте.ExecuteFunction только для импорта функций.Вместо этого используйте ExecuteStoreQuery и SqlParameter.Во втором случае функция импорта также создает сложный тип в вашем EDMX, и EF ожидает, что вы будете использовать этот сложный тип в результате вызова функции импорта.

...