Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每个模型请求的往返数据库?_C#_Asp.net Mvc 3_Entity Framework_Orm - Fatal编程技术网

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进行了检查,每个line1line2实体都向数据库发送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()并查看是否有帮助。:)@相信我,我是医生,我相信你,博士。