Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ to SQL:为什么INotifyPropertyChanged需要主键?_C#_Linq - Fatal编程技术网

C# LINQ to SQL:为什么INotifyPropertyChanged需要主键?

C# LINQ to SQL:为什么INotifyPropertyChanged需要主键?,c#,linq,C#,Linq,我四处搜寻: 这些答案并不令人满意。他们只是说添加一个主键,但我仍然不知道为什么要实现一个INotifyPropertyChanged,因为数据本身不包含任何主键,因此我可以使用关联键/外键) 在我使用L2S designer进行实验期间,我发现除非给表指定主键,否则不会生成关联代码 我希望得到一个答案来解释这种限制的原因,可能是深入的。简单的答案是,如果没有主键,数据库将无法识别两个记录中包含相同确切数据的更改。如果你只改变其中一个呢?这些类型的问题可能是它成为约束的原因。如果原始表如下所

我四处搜寻:

这些答案并不令人满意。他们只是说添加一个主键,但我仍然不知道为什么要实现一个
INotifyPropertyChanged
,因为数据本身不包含任何主键,因此我可以使用关联键/外键)

在我使用L2S designer进行实验期间,我发现除非给表指定主键,否则不会生成关联代码


我希望得到一个答案来解释这种限制的原因,可能是深入的。

简单的答案是,如果没有主键,数据库将无法识别两个记录中包含相同确切数据的更改。如果你只改变其中一个呢?这些类型的问题可能是它成为约束的原因。如果原始表如下所示,您希望生成什么类型的事件:

col1 col2 col3
test test test
然后在下一次传球时,桌子看起来像这样:

col1 col2 col3
test test2 test
这是对第一条记录的第二列的修改,还是删除一行并插入一行

更复杂的是:

col1 col2 col3
test test test
test test test
致:

这是对第1行的col1、col2、col3字段的修改,还是对第2行的col1和col2字段的修改?或者它是对行1的col1和col2字段的修改,还是对行2的col1、col2、col3字段的修改?还是删除了两行,插入了两行?还是插入/删除和修改的组合


简单的规则是,所有表都应该始终有一个主键。如果没有主键,则从所有列中生成一个主键,或者生成一个唯一的自动递增列并生成该主键。如果没有主键,除了通过行中包含的数据,您无法区分一行和另一行,也无法跟踪对它们所做的更改(如果有)。

简单的答案是,如果没有主键,数据库将无法识别两条记录中的更改,其中包含相同的精确数据。如果你只改变其中一个呢?这些类型的问题可能是它成为约束的原因。如果原始表如下所示,您希望生成什么类型的事件:

col1 col2 col3
test test test
然后在下一次传球时,桌子看起来像这样:

col1 col2 col3
test test2 test
这是对第一条记录的第二列的修改,还是删除一行并插入一行

更复杂的是:

col1 col2 col3
test test test
test test test
致:

这是对第1行的col1、col2、col3字段的修改,还是对第2行的col1和col2字段的修改?或者它是对行1的col1和col2字段的修改,还是对行2的col1、col2、col3字段的修改?还是删除了两行,插入了两行?还是插入/删除和修改的组合


简单的规则是,所有表都应该始终有一个主键。如果没有主键,则从所有列中生成一个主键,或者生成一个唯一的自动递增列并生成该主键。如果没有主键,除了通过行中包含的数据,您无法区分一行和另一行,也无法跟踪对它们所做的更改(如果有)。

简单的答案是,如果没有主键,数据库将无法识别两条记录中的更改,其中包含相同的精确数据。如果你只改变其中一个呢?这些类型的问题可能是它成为约束的原因。如果原始表如下所示,您希望生成什么类型的事件:

col1 col2 col3
test test test
然后在下一次传球时,桌子看起来像这样:

col1 col2 col3
test test2 test
这是对第一条记录的第二列的修改,还是删除一行并插入一行

更复杂的是:

col1 col2 col3
test test test
test test test
致:

这是对第1行的col1、col2、col3字段的修改,还是对第2行的col1和col2字段的修改?或者它是对行1的col1和col2字段的修改,还是对行2的col1、col2、col3字段的修改?还是删除了两行,插入了两行?还是插入/删除和修改的组合


简单的规则是,所有表都应该始终有一个主键。如果没有主键,则从所有列中生成一个主键,或者生成一个唯一的自动递增列并生成该主键。如果没有主键,除了通过行中包含的数据,您无法区分一行和另一行,也无法跟踪对它们所做的更改(如果有)。

简单的答案是,如果没有主键,数据库将无法识别两条记录中的更改,其中包含相同的精确数据。如果你只改变其中一个呢?这些类型的问题可能是它成为约束的原因。如果原始表如下所示,您希望生成什么类型的事件:

col1 col2 col3
test test test
然后在下一次传球时,桌子看起来像这样:

col1 col2 col3
test test2 test
这是对第一条记录的第二列的修改,还是删除一行并插入一行

更复杂的是:

col1 col2 col3
test test test
test test test
致:

这是对第1行的col1、col2、col3字段的修改,还是对第2行的col1和col2字段的修改?或者它是对行1的col1和col2字段的修改,还是对行2的col1、col2、col3字段的修改?还是删除了两行,插入了两行?还是插入/删除和修改的组合

简单的规则是,所有表都应该始终有一个主键。如果没有主键,则从所有列中生成一个主键,或者生成一个唯一的自动递增列并生成该主键。如果没有,除了通过行包含的数据,您无法区分一行和另一行,也无法跟踪对它们所做的更改(如果有)