C# 每个模型请求的往返数据库?
这是我在控制器中的代码C# 每个模型请求的往返数据库?,c#,asp.net-mvc-3,entity-framework,orm,C#,Asp.net Mvc 3,Entity Framework,Orm,这是我在控制器中的代码 var q = context.post; return View(q); 鉴于 @model IEnumerable<post> @{ Line1: var question = Model.FirstOrDefault(o => o.parent == null); Line2: var answers = Model.Where(o => o.parent != null); } @model IEnumerable @{ 第
var q = context.post;
return View(q);
鉴于
@model IEnumerable<post>
@{
Line1: var question = Model.FirstOrDefault(o => o.parent == null);
Line2: var answers = Model.Where(o => o.parent != null);
}
@model IEnumerable
@{
第1行:var question=Model.FirstOrDefault(o=>o.parent==null);
第2行:var answers=Model.Where(o=>o.parent!=null);
}
我已经使用sql profiler进行了检查,每个line1和line2实体都向数据库发送sql命令。这真的是使用ORM的意义和目的吗?还是我做错了什么?对你来说是的。您将集合传递给上下文,并且正在对该集合执行查询。我甚至希望这两个查询都从数据库中提取所有帖子,并在应用程序的内存中执行Linq查询,因为它转换为视图定义的
IEnumerable
。如果只想对数据库执行单个查询,则必须使用以下命令将加载的对象传递给视图,例如:
var q = context.post.ToList();
但最好创建一个新的视图模型,并在控制器中执行两个单独的查询-视图应为dump,且不应包含任何其他逻辑:
var postModel = new PostViewModel {
Question = context.post.FirstOrDefault(o => o.parent == null),
Answers = cotnext.post.Where(o => o.parent != null).ToList()
};
return View(postModel);
编辑:
当我查看这些查询时,甚至可以使用Concat
在数据库的一次往返中执行它们,类似于:
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()
};
它没有经过测试,但您可以尝试一下。您可以尝试执行
var q=context.post.ToList()在控制器中编写>并查看是否有帮助。:)@相信我,我是医生,我相信你,博士。