今天,当我尝试导入多个数据记录时,我在导入服务中发现了一个奇怪的行为。

当我这样做时,将导入所有数据记录,并且自动增加的值是正确的(see screenshot):

public void Create(List<Property> properties)
{
    foreach (Property prop in properties) {
        dbc.Property.InsertOnSubmit(prop);
        dbc.SubmitChanges();
    }
}

当我这样尝试时,只有第一个数据记录才具有正确的自动递增值(see screenshot):
foreach (Property prop in properties) {
    dbc.Property.InsertOnSubmit(prop);
}
dbc.SubmitChanges();

同样在这里:
dbc.Property.InsertAllOnSubmit(properties);
dbc.SubmitChanges();

有人知道为什么会这样吗?根据我的理解,所有这三种变体都应导入所有数据记录,但是缺少的自动递增值表明并非如此。

[编辑] 添加了两个屏幕截图。

最佳答案

我遇到了同样的问题,事实证明,该问题是由于在映射的类上重写Equals引起的。我的Equals方法仅比较主键字段(即身份字段)。当然,当对象是新对象时,所有标识均为0。因此,在调用InsertAllOnSubmit时,它认为所有新对象都是相同的,并且除了第一个对象外,其他每个对象基本上都被忽略了。

关于c# - InsertAllOnSubmit仅插入第一条数据记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1074611/

10-11 00:06