簡體   English   中英

LINQ to SQL:為什么INotifyPropertyChanged需要主鍵?

[英]LINQ to SQL: why a primary key is necessary for INotifyPropertyChanged?

我搜索了:

我如何使Linq to Sql實體實現INotifyPropertyChanged

如果從本地數據庫中提取,LINQ-to-SQL類不實現INotifyPropertyChanging和INotifyPropertyChanged

這些答案並不令人滿意。 他們只是說要添加一個主鍵,但我仍然不知道為什么要實現INotifyPropertyChanged ,因為數據本身不包含任何主鍵,因此我可以使用關聯/外鍵。

在嘗試使用L2S設計器的過程中,我發現除非將主鍵提供給表,否則不會生成關聯代碼。

我期望得到一個答案,可能會深入解釋這種約束的原因。

簡單的答案是,如果沒有主鍵,數據庫將無法分辨出其中具有相同精確數據的兩個記錄的變化。 如果您只更改了兩者之一怎么辦? 這些類型的問題很可能會成為約束。 如果原始表如下所示,您期望生成什么類型​​的事件:

col1 col2 col3
test test test

然后在下一次通過時,表格如下所示:

col1 col2 col3
test test2 test

這是對第一條記錄的第二列的修改,還是對一行的刪除和對一行的插入?

更復雜:

col1 col2 col3
test test test
test test test

至:

col1 col2 col3
test2 test2 test2
test3 test3 test

這將是對row1的col1,col2,col3字段的修改以及對row2的col1和col2字段的修改嗎? 還是修改row1的col1和col2字段,以及修改row2的col1,col2和col3字段? 還是刪除兩行,插入兩行? 還是插入/刪除和修改的組合?

一個簡單的規則是,所有表應始終具有主鍵。 如果沒有,則在所有列中創建一個主鍵,或生成一個唯一的自動增量列,然后將該主鍵作為該主鍵。 沒有一行,您只能通過行包含的數據來區分另一行,也無法跟蹤對其所做的更改(如果有)。

暫無
暫無

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

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