- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从我的数据库中检索具有许多关系的大型实体层次结构。与其创建一个包含许多 Includes
的巨大查询,我读到可以使用许多较小的查询来获取层次结构的不同部分,然后 EF 使用一种称为“关联”的东西以某种方式将所有内容粘合在一起修理”。但是我正在努力让它发挥作用。 (顺便说一下,我正在使用 EF5 和 POCO)。
作为一个简单的示例,我正在尝试使用“修复”技术检索客户及其所有相关订单。这就是我在 BLL 层中所做的:-
var customer = context.Customers
.Where(o => o.Id == requestedCustomerId).SingleOrDefault();
customer.Orders = context.Orders
.Where(o => o.CustomerId = requestedCustomerId).ToList();
当我检查返回到 UI 层的客户实体时,customer.Orders 给出了 ObjectDisposedException。我做错了什么?
作为如何使用修正的进一步示例,我将如何填充订单的相关 OrderLine(在单独的查询中,或作为上面第二个查询的一部分)?如果 OrderLine 实体有一个 ProductCategory 父实体怎么办 - 我将如何填充它们?
更新
我刚刚尝试了以下方法,它有效:-
var orders = context.Orders
.Where(o => o.CustomerId = requestedCustomerId).ToList();
var customer = context.Customers
.Where(o => o.Id == requestedCustomerId)
.Include("Orders")
.SingleOrDefault();
我说的第二个查询不会再次从数据库中获取订单,并且 EF 会将前一个查询检索到的那些关联起来(即使它们只是位于某个任意变量中),我说得对吗?
最佳答案
ObjectDisposed
异常可能是因为您打开了延迟加载并且在尝试访问 customer.Orders
之前处理了上下文。我不喜欢延迟加载,所以我总是将其关闭:
// in your context constructor:
this.Configuration.LazyLoadingEnabled = false;
您的原始示例现在应该可以工作了。
在您的更新中,您急切地使用 Include
子句加载 Customer.Orders
。这意味着 EF 在获取 Customer
记录时使用 join
从数据库获取此数据。
编辑:
DbContext
“记住”它看到的每个对象,其中一个对象基本上是一个数据库行。
如果您加载与特定 Customer
关联的 Orders
,则上下文会记住这些 Order
对象。
当您随后获取 Customer
对象(没有 .Include( "Orders")
)时,EF 足够智能以附加 Order
您之前获取到 Customer
对象的对象。
它可以做到这一点,因为 Order
对象有一个 CustomerId
,所以当你得到那个 Customer
对象时,它可以查看它的 CustomerId
属性并将 Order
对象添加到 Customer.Orders
集合。
它只会附加它知道的 Orders
,所以如果您之前由于某种原因没有加载所有关联的 Order
记录,EF 只会附加那些它见过。
关于c# - 如何使用 Entity Framework 关联 "fixup"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317526/
我经常使用 git rebase -i HEAD~N 压缩/修复我所有的临时提交,或者我刚刚提交的提交,然后再推送到上游。 我了解了 git commit --fixup HEAD,它可以帮助我避免多
我有一个用 C++ 编写的 Windows 8 Metro 应用程序,我正在尝试将其编译为 ARM。在链接过程中,我遇到了以下错误的许多实例: "error LNK2013: BLX23(T) fix
“修复”应用于部分时究竟做了什么?在一个 fasm 示例中,我发现了以下部分 delcaration,我真的不确定 fixups 属性的作用,我在 fasm 文档中找不到太多关于它的信息。 secti
我听说过“vtable fixup”这个术语。这是什么意思?我没有成功问谷歌。我已经知道 vtable 是什么,所以不需要定义。 最佳答案 对我来说,Google显示 vtable fixups 是
假设你有: A-B-C 现在您的构建/测试失败了。该修复程序应 merge 到 A 中。我目前的工作流程是这样的: $ git commit -m "fixA" A-B-C-fixA $ git re
我执行了以下 merge : A---B---C---E (HEAD, merge of C and D) / D---| 但我注意到 E 中的一些问题,并在 F 中
在 Windows 下构建 DLL 时,我得到以下输出: Linking main.exe ... Warning: resolving _findPeaksWrapper by linking to
我需要从我的数据库中检索具有许多关系的大型实体层次结构。与其创建一个包含许多 Includes 的巨大查询,我读到可以使用许多较小的查询来获取层次结构的不同部分,然后 EF 使用一种称为“关联”的东西
我一直在阅读关于 commit 的 git 文档和 rebase , 但我仍然不明白使用 fixup! 之间的区别或 squash!在执行 rebase --autosquash 时作为提交消息的前缀
假设我有一个 git 分支,在共享它之前的最后审查中,我发现了一些小错误,例如拼写错误。我想做的是将那个补丁应用为“修复”,但它实际上会影响许多提交,因此在最终历史记录中没有错误的迹象。 也就是说,如
我知道如何将提交压缩在一起并删除消息: pick A do thing pick B debug fixup C more debugging pick D do another thing 这将导致
这真的是预期的行为吗?我使用的是标准 T4 POCO 模板(但存储库和 UnitOfWork 是通过 http://geekswithblogs.net/danemorgridge/archive/2
我将所需的程序集嵌入到我的项目中,并在运行时使用 AppDomain.CurrentDomain.AssemblyResolve 事件解析它们。 除irrKlang 外,一切正常的 .net4-w
我想通过 git rebase 清理一个 git repo(github 托管),并使用“fixup”选项将类似的提交 merge 为一个提交。 我的 repo 可以追溯到 3 年前,所以我认为我可以
我使用 Git Extensions 已经有一段时间了(太棒了!)但我还没有找到以下问题的简单答案: 有时,在输入提交消息时,会出现打字错误。我的 friend 向我展示了如何通过以下方式修复它(在
所以我们的提交日志总是以#workitemid: rest of title开头.这在编写提交消息时会造成问题。因此我们有 commit.cleanup设置设置为 scissors . 不过,好像是g
git 上是否有一种方法/命令可以将对某些文件所做的更改“分发”到修改每个文件的最后一次提交? 在很多情况下,我注意到已经提交的文件中有一个小的拼写错误(主要是注释:缺少逗号、括号结束、一些小的语法错
我正在努力调试此错误,因为尽管一直报告该错误,但该应用的行为符合预期。希望得到有关其含义以及如何调试其源代码的指针。 抱歉含糊不清,但由于我得到了预期的结果,我不确定要提供哪些其他信息。 更新 我已对
此 mingw 包含 gcc 4.6.3,名称为 - i686-w64-mingw32。 在 Windows 上,一个 Qt 的 .pro 文件 w.r.t 一个 hello world 程序: QT
我一直在努力寻找一个好的解决方案,但没有成功,所以要么我没有搜索正确的关键字,要么我们从一开始就做错了,所以这个问题不应该真的存在. 澄清更新:我希望它作为单元测试而不是集成测试,所以我不希望它访问数
我是一名优秀的程序员,十分优秀!