【问题标题】:LINQ foreign key breaks queryLINQ 外键中断查询
【发布时间】:2013-03-04 00:54:24
【问题描述】:

下面的 LINQ 查询 (personDevices) 没有任何问题。但是,当我将“123”替换为通过外键直接访问值时:

t3.deviceTypeA.mobile_number

...查询返回 0 个结果。最终我想做一个如下的选择语句:

number = 
t3.type == "phone" ? t3.deviceTypeA.mobile_number:
t3.type == "computer" ? t3.deviceTypeB.computer_number :
t3.type == "legacy" ? t3.deviceTypeC.legacy_number :
"nodata"

这解释了为什么我需要外键,但我已经简化了问题的查询。

var personDevices = from t1 in db.people
join t2 in db.peopleDevices on t1.person_id equals t2.person_id
join t3 in db.deviceRegistrations on t2.registration_id equals t3.registration_id

select new {
  t1.person_id,
  t1.name,
  t3.type,
  t3.generated_code,
  t3.hardware_id,
  devicetypeA_number = "123"
};

由于各种原因,我禁用了外键的参照完整性并删除了数据检查。使用 SQL Server 2008 并在 C# .NET 4 下运行查询。

为什么访问外键表中的数据会导致查询没有返回结果,如何解决?

【问题讨论】:

  • 启动“var personDevices”的 sn-p 完全可以工作,但是当我用“t3.deviceTypeA.mobile_number”替换“123”时,它没有返回任何结果。我刚刚提到,我真正打算做的是让 sn -p 开始“number =”替换“devicetypeA_number = 123”行,以明确我需要使用外键的原因
  • 我想知道您是否真的遇到了 t3.deviceTypeA 为空的异常,并在代码中的其他地方吞下了该异常。我总是建议在所有异常上打开 break 来捕捉这种事情。我看到你已经解决了这个问题,但我想我会把它扔在那里,以防其他人遇到类似的问题。

标签: sql sql-server linq sql-server-2008 foreign-keys


【解决方案1】:

我永远无法解决这个问题。相反,我更改了数据库结构,以便可以通过 device_type 字段在一个表中引用所有 3 种设备类型,并为两种不同类型的参考编号重新使用一列。

是的,设计并未完全标准化,但要简单得多。

我最终也使用了内联查询,因为我倾向于从 LINQ 获得的结果与我的预期不符,所以由于时间限制,我放弃了,选择了简单的选项,而不是乱七八糟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多