我是说我有两个表格:

  • 报告
  • 评论

并假设我有一个数据库上下文:

var reports = db.Reports();

我怎么能确保所有评论对每份报告都载呢?

在这一点上,我要离开的数据库,但是仍然 访问的意见。(例如:)

reports[0].Comments[0].Subject
有帮助吗?

解决方案

我假设有1-M FK之间关系的报告和意见(1份报告可以有许多意见)?

一种选择是使用 DataLoadOptions.LoadWith 方法-喜欢的东西如下:

var reports = db.Reports();
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Reports>(r => r.Comments);      // Ask for Comments along with reports
reports.LoadOptions = dlo;

现在,每次你选择一个报告数据方面,评论将被提取数据库。

只要小心的所有领域的意见将选择-没有的方式使用这种方法选择的一个子集的领域。

另一个选择是将特定你想要什么选择在皇宫查询的,例如

var myReportsList = from report in db.Reports
                    select new {  // Using anonymous type, but could use a custom class
                       Report = report,
                       Comment = report.Comment.Detail,   // for example
                       Subject = report.Comment.Subject
                    };

要了解当的查询得到运行和连接数据库关闭,你会需要了解:

  • 延迟执行模型的皇宫和皇宫Sql(基本上,为皇宫SQL,仅查询时运行的,结果被要求,例如通过循环的集合或者结合到一个网)
  • 之间的差IQueryable和类型

Jon长柄水杓"C#在深度"提供了一个很好的概述这些,我也听到了非常好的事情"皇宫在行动"-再加上有大量的博客有关这些概念做的科目更多的正义比我可以在这里做;o)

其他提示

请记住,如果你使用LoadOptions定义多哈的道路(报告、评论、anotherentity),第3和进一步跳载入(如果相关的超过1:n关系)的代码这是非常低效:他们将执行一项查询每父母。对报告的评论意见,但是确定的,他们将获取在2的查询。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top