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