c# - 根据每个模型请求往返数据库?

标签 c# asp.net-mvc-3 entity-framework orm

这是我在 Controller 中的代码

var q = context.post;
return View(q);

在 View 中

@model IEnumerable<post>
@{
  Line1:  var question = Model.FirstOrDefault(o => o.parent == null);
  Line2:  var answers = Model.Where(o => o.parent != null);
}

我已经用 sql-profiler 检查过,每个 line1line2 实体都将 sql-command 发送到数据库。这真的是使用 ORM 的意义和目的吗?或者我做错了什么?

最佳答案

在你的情况下是的。您将集合传递给上下文,并且正在对该集合执行查询。我什至希望这两个查询都从数据库中提取所有帖子并在您的应用程序内存中执行 Linq 查询,因为转换为 IEnumerable<post>由您的观点定义。如果您只想对数据库执行单个查询,则必须将加载的对象传递给您的 View ,例如:

var q = context.post.ToList();

但是最好创建一个新的 View 模型并在您的 Controller 中执行两个单独的查询 - View 应该是转储的并且它不应该包含任何额外的逻辑:

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

它未经测试,但您可以尝试一下。

关于c# - 根据每个模型请求往返数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10945044/

相关文章:

c# - 初始化接口(interface)中的值

mysql - 无法加载文件或程序集“MySql.Data.EntityFramework,版本=8.0.19.0或其依赖项之一”

c# - 具有多个数据库和泛型的 Entity Framework Multi-Tenancy 架构

c# - 如何访问 IKVM 移植的 Java 库的 .net 资源

c# - 创建 Excel 应用程序时出现 COM 异常 80040154

c# - 使用 Session.SyncRoot 锁定每个 session 有哪些危险?

c# - 从 var 获取值

c# - c#中float类型的最大值

c# - 使用 Paypal 的 IPN、C# 连接数据库时出现问题

c# - 如何仅在 MVC3 应用程序中选择某个元素时创建新的下拉列表?