簡體   English   中英

我在實體框架中獲得了非空外鍵的空值

[英]I get a null value for a non-nullable foreign key with the entity framework

我究竟做錯了什么? 我使用向導映射了一個SQL Server數據庫。 這是一個相當復雜的數據庫,但是對於本示例,我們可以假設三個表:REPORTROWS,REPORTCOLUMNS和REPORTNAMES。 REPORTROWS具有以下列ID,RESULT,REPORTDATE,REPORTCOLUMNID,REPORTNAMEID。 REPORTNAMES和REPORTCOLUMNS是非常簡單的ID為NAME的表。 ID始終是主鍵,而REPORTCOLUMNSID和REPORTNAMESID是將REPORTROWS與REPORTCOLUMNS和REPORTNAMES鏈接的外鍵。

現在,我用有效值填充了三個表(我沒有違反任何外鍵約束)。 當我調用以下代碼

var recs = from a in ctx.REPORTROWS
           where a.REPORTNAMES.NAME == "my report" && a.REPORTDATE == somedate select a;

我得到了想要的行,但是稍后在代碼中無法使用字段a.REPORTCOLUMNS,因為它為空! 為什么? REPORTCOLUMNID定義為不可為空的整數(這就是為什么它是外鍵的原因)。 但是,字段a.REPORTNAMES是正確的。 即使我向查詢添加&& a.REPORTCOLUMNS != null ,a.REPORTDATE仍為null。

我看到過類似問題的鏈接,但找不到明確的答案。 有人可以幫我嗎? 供您參考,我正在使用.NET Framework 3.5,並且在映射數據庫時不會在向導中檢查“包括外鍵”。 它變灰了(我仍然不明白為什么)。

提前謝謝

這是EF版本v2.0.50727

您的REPORTCOLUMNS(我相信,您的REPORTNAMES)表也應該在您的上下文中表示為實體,對嗎? 我相信會發生此錯誤是因為未啟用延遲加載,並且您沒有在查詢中顯式獲取reportcolumns實體屬性。

您可以嘗試以下代碼或類似的方法:

var recs = from a in ctx.REPORTROWS.Include(r => r.REPORTCOLUMNS)
           where a.REPORTNAMES.NAME == "my report" && a.REPORTDATE == somedate select a;

最主要的是在執行查詢時執行“包含”方法來獲取Reportcolumn實體及其屬性。

另一個選項是在REPORTROWS實體中顯式指定REPORTCOLUMNID屬性,該屬性映射到REPORTCOLUMNS主鍵。 您應該能夠執行“ reportrow.REPORTCOLUMNID”來獲取關聯的報告列實體的ID,但是直到再次查詢它之前,您將無法獲得其他屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM