Roundtrip to database on each model request?

asp.net-mvc-3, c#, entity-framework, orm

Solution

In your case yes. You passed set to context and you are executing queries on that set. I even expect that both queries pulled all posts from database and executed Linq query in memory of your application because of conversion to `IEnumerable<post>` defined by your view. If you want to execute only single query to database you must pass loaded objects to your view by using for example:

var q = context.post.ToList();

But it would be better to create a new view model and execute two separate queries in your controller - view should be dump and it should not contain any additional logic:

var postModel = new PostViewModel {
                    Question = context.post.FirstOrDefault(o => o.parent == null),
                    Answers = cotnext.post.Where(o => o.parent != null).ToList()
                };
return View(postModel);

Edit:

As I'm looking on those queries it should be even possible to execute them in one roundtrip to database using `Concat` - something like:

var result = context.post.Where(o => o.parent != null)
                    .Concat(context.post.Where(o => o.parent == null)
                                        .OrderBy(...).Take(1))
                    .ToList();
var postModel = new PostViewModel {
                    Question = result.FirstOrDefault(o => o.parent == null),
                    Answers = result.Where(o => o.parent != null).ToList()
                };

It is not tested but you can give it a try.

Problem

here is my code in Controller ``` var q = context.post; return View(q); ``` in view ``` @model IEnumerable<post> @{ Line1: var question = Model.FirstOrDefault(o => o.parent == null); Line2: var answers = Model.Where(o => o.parent != null); } ``` I've checked with sql-profiler , each line1 and line2 entity sends sql-command to database . is this really meaning and purpose of using ORM? or I do sth wrong ?

Original source