开发者

Stored Procedures and EF Code First

开发者 https://www.devze.com 2023-02-22 14:36 出处:网络
I would like to use a stored procedure to retrieve entit开发者_开发问答ies from a DB, I don\'t care about tracking changes. I just need all entities be resolved including related ones.

I would like to use a stored procedure to retrieve entit开发者_开发问答ies from a DB, I don't care about tracking changes. I just need all entities be resolved including related ones.

  1. Do I have to use SqlCommand?

  2. What about complex properties, will they be resolved too?

  3. Any other limitations you could tell me about?

Thanks!


General answer about using stored procedures in EF is here so stored procedure in pure EF will not handle navigation properties. The answer also mentioned EFExtensions but that is not available in DbContext API.

To execute stored procedure in DbContext API use:

var entities = context.Database.SqlQuery<MyEntity>(...);

DbContext API doesn't offer any function import like EDMX and ObjectContext API.


Stored Procedures are not supported in Code First. So yes, you'll have to use SqlCommand or whatever your DB of choice provides if you intend on using Code First.

Stored Procedures ARE supported in DB First or Model First.


Try function import: http://msdn.microsoft.com/en-us/library/dd456824.aspx


By Looking at database first approach, in auto generated context class it defines stored procedures as a virtual functions, Here I share a function from my project, this stored procedure returns a complex type of question.

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);
        }

I used this in my code first do I can call stored procedures like functions as:

IQueryable<Question> questions = db.GetMyInnerQuestions(id).AsQueryable();

Hope this help

0

精彩评论

暂无评论...
验证码 换一张
取 消