嘿傢伙,好的,這裏是場景:爲什麼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字段,並且它總工程....很好,幾乎總是
所以,我的問題是雙重的:
- 爲什麼是HasLoadedOrAssignedValue設置爲true時,它不應該
- 更重要的是,爲什麼我遇到這個不連貫的行爲。我知道你並不總是必須直接設置實體屬性,所以爲什麼這次不工作?如果這是一個LINQ to SQL規則,那麼爲什麼規則有時會被打破?
乾杯!
問題: 你是否明確地將ID設置爲null,或者只是不設置它? ImageID是Image和Non-nullable的PK嗎? 如果您設置圖像對象,它會工作嗎?我知道那不是你想要做的,但是確定這是否會起作用會縮小你的潛在原因列表。 如果不知道更多細節,1和2很難回答。 – 2009-08-12 11:46:09