我想使用存储过程从数据库中检索实体,我不关心跟踪更改,只需要所有实体都被解析,包括相关实体。
我必须使用SqlCommand吗?
答:是的,你需要使用SqlCommand来执行存储过程并获取数据。那复杂属性呢,它们也会被解析吗?
答:是的,复杂属性也会被解析并返回相应的值。还有其他限制可以告诉我吗?
答:没有其他明显的限制,但请注意存储过程是否正确地返回所需的实体数据。
谢谢!
我想使用存储过程从数据库中检索实体,我不关心跟踪更改,只需要所有实体都被解析,包括相关实体。
我必须使用SqlCommand吗?
那复杂属性呢,它们也会被解析吗?
还有其他限制可以告诉我吗?
谢谢!
关于在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();
希望这可以帮到你