InsertAllOnSubmit仅插入第一个数据记录

时间:2009-07-02 14:13:24

标签: c# sql-server linq-to-sql insert

当我尝试导入多个数据记录时,我注意到我的导入服务中出现了一种奇怪的行为。

当我这样做时,导入所有数据记录并且自动递增的值是正确的(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();

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

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

5 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,事实证明问题是由于覆盖了映射类上的Equals。 My Equals方法仅比较作为标识字段的主键字段。当然,当对象是新的时,所有的身份都是0.所以当调用InsertAllOnSubmit时,它认为所有新对象都是相同的,并且除了第一个之外基本上都被忽略了。

答案 1 :(得分:2)

不太确定为什么第二种变体不起作用,但最后一种不应该是:

dbc.Property.InsertallOnSubmit(properties);
dbc.SubmitChanges();

修改

对于第二个循环尝试:

foreach (Property prop in properties) 
{   
    var newProp = new Property();
    newProp = prop;
    dbc.Property.InsertOnSubmit(newProp);
}
dbc.SubmitChanges();

对于最后的解决方案,请尝试:

dbc.Property.InsertAllOnSubmit(properties.ToList());
dbc.SubmitChanges();

答案 2 :(得分:1)

由于其他用户具有相同的奇怪行为,我已将此问题报告给Microsoft:

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=483711

答案 3 :(得分:1)

我几分钟前遇到过这个问题。

我的问题是我发送给InsertAllOnSubmit<mappedClass>()的列表中充满了源自单个mappedClass实例的对象。我正在修改成员,具体取决于我想要添加到数据库的视图模型的实例,然后将实例重新添加到列表中。

似乎是一个新手的错误,但如果有人仍然遇到这个问题,可能需要检查一下!

答案 4 :(得分:0)

只需使用这个完美的解决方案 因为,我们有一个新的实体,如&#34; TestTable&#34; 在for循环中将此实体初始化为

TestTable objTable = new TestTable ();

在for循环中添加实体项以及列表<TestTable>的列表对象 并将InsertAllOnSubmit()移到for循环之外,现在它必须工作。