3 回答

TA貢獻1895條經驗 獲得超7個贊
您不能并且有充分的理由。請參閱KM評論。
我說您可以做的一件事是有兩個表,其中一個表包含匿名數據,另一個表在真實用戶登錄后存儲真實用戶數據。
或者您可以(未經測試或由我完成)具有這種表布局:
---Customers----
AutoNumber PK <- This links to all other tables in your database, and does NOT change.
CustomerID <- This can change.
CustomerType <- Anonymous or logged in.
當他們登錄時,將CustomerType和CustomerID更改為所需的名稱。
因此,您的查詢可能如下所示:
Dim customer As Customer = (From c In db.Customer _
Where c.CustomerID = {Some temp ID} _
AndAlso c. CustomerType = "Anonymous").FirstOrDefault
// After user logs in.
customer.CustomerID = {Make a new user ID here}
customer.CustomerType = "LoggedIn" {or what ever}
db.SaveChanges()
請注意,自動編號主鍵永遠不會更改。這樣一來,您與客戶表有關系的任何表仍然可以使用,而不必對主鍵進行級聯更新(這就像用鉛筆刺中眼睛一樣)。

TA貢獻2037條經驗 獲得超6個贊
如果在任何時候都可能只有一個數據庫上下文實例,那么修改pk不會是一個問題。但是每個上下文實例都維護自己的緩存,并且可以緩存要修改的記錄。
EF與數據庫的交互使用pk(來自上下文緩存)來標識它們正在查詢的記錄。如果上下文對象可以更新持久性密鑰,則其他上下文對象用來標識該記錄的信息將立即且永久錯誤。
簡而言之,如果更新主鍵,則可能在上下文的所有其他實例中使緩存無效,這將從根本上破壞EF。這是更新pk不好的主要原因之一。
- 3 回答
- 0 關注
- 687 瀏覽
添加回答
舉報