【发布时间】:2014-03-07 12:54:15
【问题描述】:
我的数据库很简单:我有合同、客户和区域。每个合同都与一个客户相关联,每个客户都与一个区域相关联。因此:
Contract.Customer.Area.AreaId
应该始终有效,因为 Area 和 Customer 都不能为空。
现在,在工作线程中执行以下代码(它使用在主线程中创建的ObjectContext - 我知道,这不是一个好主意,但我正在做代码维护):
if (something)
CallA();
else if (Contract.Customer.Area.AreaId == (int)Area.Worldwide)
CallB();
令人惊讶的是,当执行这些行时,Contract.Customer.Area大多数时间为空(第三行导致崩溃)。
使用 EF Profiler,我看到 Entity Framework 在崩溃发生之前向数据库发送了一个请求(以读取 Area 对象)。但它似乎没有等待响应......
另外:如果我在if 上放置一个断点并使用 F10 逐行遍历,Contract.Customer.Area 始终有效。崩溃时也是如此:如果我将 PC 移动到 if 并按 F10,Contract.Customer.Area 也有效。
任何想法为什么 Area 为空?我应该如何纠正这个?使用 Include 来预加载区域似乎可以工作......现在。
谢谢!
【问题讨论】:
-
(个人经验)大多数时候我得到一个空值,我真的不知道为什么,它与线程有关。但在你的情况下我不确定,因为我不知道你的代码。
-
您能否发布客户和区域类
-
@BassamAlugili 它们是实体框架生成的类。它们是从 EDMX 文件生成的。上下文继承自 ObjectContext。谢谢:)
标签: c# multithreading entity-framework