2009-07-14 200 views
4

嘿傢伙,好的,這裏是場景:爲什麼HasLoadedOrAssignedValue屬性設置爲true?

VS 2008 .NET 3.5 SP1,LINQ to SQL。

我有一個產品實體,它有一個ImageID字段,因此它與圖像實體有關係。這全部在模式和DBML中定義。

現在,假設我創建了一個沒有ImageID的新Product實體,並將其保存到數據庫中。此時,實體的_Image字段已將HasLoadedOrAssignedValue設置爲false,因爲它應該如此。

現在,當我從數據庫中檢索該實體時,如果沒有ImageID,即ImageID設置爲null,並且附加到它的Image Entity也設置爲null,則HasLoadedOrAssignedValue設置爲true ....爲什麼??

現在,當我嘗試將ImageID屬性設置爲有效的int時,我得到一個ForeignKeyReferenceAlreadyHasValueException異常。現在,我知道人們說,「哦,你必須設置關係屬性本身,所以,Product.Image = someImage,而不是Product.ImageID = 2」,但我總是設置ID字段,並且它總工程....很好,幾乎總是

所以,我的問題是雙重的:

  1. 爲什麼是HasLoadedOrAssignedValue設置爲true時,它不應該
  2. 更重要的是,爲什麼我遇到這個不連貫的行爲。我知道你並不總是必須直接設置實體屬性,所以爲什麼這次不工作?如果這是一個LINQ to SQL規則,那麼爲什麼規則有時會被打破?

乾杯!

+0

問題: 你是否明確地將ID設置爲null,或者只是不設置它? ImageID是Image和Non-nullable的PK嗎? 如果您設置圖像對象,它會工作嗎?我知道那不是你想要做的,但是確定這是否會起作用會縮小你的潛在原因列表。 如果不知道更多細節,1和2很難回答。 – 2009-08-12 11:46:09

回答

2

問題是看着Image屬性,並導致它加載 - 甚至可能是調試器。

在Product.Image屬性中設置斷點並查看導致它的路徑。

+1

這正是問題所在。在一個測試場景中,我運行它而沒有進行調試,而在第二種情況下,我通過觀察各種屬性來運行它。這導致了錯誤。很顯然,錯誤可能會在沒有調試的情況下發生,如果您在代碼中隨時檢查所述屬性的值。 – andy 2009-10-08 23:59:04

1

所以,我今天有這個問題,我不知道這是否會幫助任何人,但事實證明,在我的LINQ實體DBML文件中,我有一個關係,讓我們之間的評論和用戶之間通過UserID。該關係被命名爲User1。當我加載表單時,我使用這種關係在狀態欄中設置了一些信息。不幸的是,我還在表格其他地方的下拉列表中顯示了用戶列表。因此,當我嘗試更改下拉菜單時,它知道數據已被使用。一旦我爲表單狀態欄做了一個單獨的linq查詢,一切都奏效了。我知道這是預期的行爲,但這很令人沮喪。

相關問題