场景:Customer
实体具有State
和Color
的属性。即华盛顿和绿色。 SQL Server外键关系设置正常,并且都具有正确的参考完整性的正确数据。
考虑这个LINQ to SQL查询:
var cust = (from c in db.Customers
join s in db.States on c.StateID equals s.ID
join cl in db.Color on c.ColorID equals cl.ID
where c.ID == someCustomerID
select c).SingleOrDefault();
给定:通过SQL Server Profiler查看时生成的SQL语句会生成正确的查询。在SQL Management Studio中捕获并运行相同的查询会按预期返回数据。
cust.StateID
和cust.State
属性填充正常。我可以在执行上述L2S查询后立即检查这些属性。
问题:cust.Color
对象,评估为null
。好消息是cust.ColorID
填充了DB中正确的FK编号。 Color表中有一行带有该ID。
问题:如何更改或改进此查询以包含Color实体?
问题的根源在于LINQ To SQL设计器以及之前对FK关系的搞砸。 Customer和Color之间的关联与客户的另一个字段有关。这是总的PEBKAC,我没有检查过L2S设计师是否有任何问题。我从L2S设计器中删除了Color表,刷新了Server Explorer中的表列表,然后再将Color表拖到L2S上。该协会已得到纠正。
答案 0 :(得分:1)
您是否有与您的数据上下文关联的LoadOptions对象?尝试添加以下内容:
var lo = new LoadOptions(x => x.Color);
lo.LoadWith<Color>();
using (var db = new SomeDataContext())
{
db.LoadOptions = lo;
. . .
}
答案 1 :(得分:1)
就我而言,DataContext
上的ObjectTrackingEnabled = false
为{{3}},所以我已经改变了:
using (var db = new ERPDataContext() { ObjectTrackingEnabled = false })
{
// ..
}
to(我也可以简单地省略它,因为ObjectTrackingEnabled = true
是默认值):
using (var db = new ERPDataContext() { ObjectTrackingEnabled = true})
{
// ..
}
答案 2 :(得分:0)
问题的根源在于LINQ To SQL设计器以及之前对FK关系的搞砸。 Customer和Color之间的关联与客户的另一个字段有关。这是总的PEBKAC,我没有检查过L2S设计师是否有任何问题。我从L2S设计器中删除了Color表,刷新了Server Explorer中的表列表,然后再将Color表拖到L2S上。该协会已得到纠正。