我已經通過一個實際的例子學習了ASP.Net和Entity Framework 4。爲了試用這個,我使用User
的例子發送設備Repair
。他們在線創建一個賬戶,添加一組Details
(地址,電話,傳真等),並在線創建退貨單(RMA
)。實體框架/數據庫設計 - 更新數據但保留以前數據的鏈接
我正在努力的概念是將Details
分配給Returns
。 A Return
有一套Details
,一個用於聯繫,交付和計費。這些可以是Detail
表的外鍵,如下所示。
問題是,如果User
在線編輯它們的Details
,它將更新在Return
上使用的Details
。這不是理想的行爲。 Return
應使用在創建時可用的Details
。
問題是,你如何使實體框架創建一個新的Detail
對象,而不是更新現有的對象。也就是說,如果用戶用新的郵政編碼更新Detail
23,則Detail
23不被更改,而是創建新的Detail
(即45)。 Detail
23從User
中刪除,並且新的Detail
45被添加到User
。雖然使用Detail
23的現有RMA
不受影響,但如果您查詢RMA
,則會得到在創建時提供的詳細信息的含義。
如果在閱讀這個問題,你認爲這個概念是有缺陷的,取而代之的是DB進行不同的設計應(即複製在RMA
表Detail
數據列,或添加在複合鍵的形式Detail
表中創建修訂歷史)。我也很樂意聽那些明智的話。
你應該問自己一個問題:誰擁有23號細節?它應該是用戶或RMA,而不是兩者。如果它是RMA,它將代表適用於特定RMA的用戶詳細信息,如果是用戶,它將代表獨立於任何RMA的用戶詳細信息。 –
UserID引用創建RMA的用戶。然而,可能有幾個人可以看到RMA,即需要查看它的工作人員。 – JonWillis