Сохраненные процедуры и код EF
Я хотел бы использовать хранимую процедуру для извлечения сущностей из БД, мне не нужны отслеживания изменений. Мне просто нужно разрешить все сущности, включая связанные с ними.
-
Нужно ли использовать SqlCommand?
-
Как насчет сложных свойств, они также будут разрешены?
-
Любые другие ограничения, о которых вы могли мне рассказать?
Спасибо!
Ответы
Ответ 1
Общий ответ об использовании хранимых процедур в EF здесь, поэтому хранимая процедура в чистом EF не будет обрабатывать свойства навигации. Ответ также упоминался EFExtensions, но он недоступен в API DbContext.
Для выполнения хранимой процедуры в API DbContext используйте:
var entities = context.Database.SqlQuery<MyEntity>(...);
API DbContext не предлагает импорт каких-либо функций, таких как EDMX и ObjectContext API.
Ответ 2
Сохраненные процедуры не поддерживаются в Code First. Итак, да, вам нужно будет использовать SqlCommand или что-то другое, что предлагает ваш DB, если вы намереваетесь использовать Code First.
Сохраненные процедуры поддерживаются в DB First или Model First.
Ответ 3
Попробуйте импортировать функцию: http://msdn.microsoft.com/en-us/library/dd456824.aspx
Ответ 4
. Рассматривая первый подход к базе данных, в автоматически создаваемом контекстном классе он определяет хранимые процедуры как виртуальные функции. Здесь я разделяю функцию из моего проекта, эта хранимая процедура возвращает сложный тип вопроса.
public virtual ObjectResult<Question> GetMyInnerQuestions(Nullable<int> id)
{
var idParameter = id.HasValue ?
new ObjectParameter("Id", id) :
new ObjectParameter("Id", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Question>("GetMyInnerQuestions", idParameter);
}
Я использовал это в своем коде, сначала я могу вызвать хранимые процедуры, такие как функции:
IQueryable<Question> questions = db.GetMyInnerQuestions(id).AsQueryable();
Надеемся на эту помощь