我想使用存储过程从数据库中检索实体,我不关心跟踪更改。我只需要解决所有实体,包括相关实体。
我必须使用SqlCommand吗?
那些复杂的属性,它们也会得到解决吗?
您可以告诉我任何其他限制吗?
谢谢!
我想使用存储过程从数据库中检索实体,我不关心跟踪更改。我只需要解决所有实体,包括相关实体。
我必须使用SqlCommand吗?
那些复杂的属性,它们也会得到解决吗?
您可以告诉我任何其他限制吗?
谢谢!
关于在EF中使用存储过程的一般答案是 这里 所以纯EF中的存储过程不会处理导航属性。答案也提到了 EFExtensions 但这在DbContext API中不可用。
要在DbContext API中执行存储过程,请使用:
var entities = context.Database.SqlQuery<MyEntity>(...);
DbContext API不提供任何函数导入,如EDMX和ObjectContext API。
关于在EF中使用存储过程的一般答案是 这里 所以纯EF中的存储过程不会处理导航属性。答案也提到了 EFExtensions 但这在DbContext API中不可用。
要在DbContext API中执行存储过程,请使用:
var entities = context.Database.SqlQuery<MyEntity>(...);
DbContext API不提供任何函数导入,如EDMX和ObjectContext API。
Code First不支持存储过程。所以是的,如果您打算使用Code First,您将不得不使用SqlCommand或您选择的任何数据库。
DB First或Model First支持存储过程。
通过查看数据库第一种方法,在自动生成的上下文类中,它将存储过程定义为虚函数,这里我从我的项目共享一个函数,这个存储过程返回一个复杂类型的问题。
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();
希望这有帮助