代码之家  ›  专栏  ›  技术社区  ›  Michael Klement

InsertAllOnSubmit仅插入第一条数据记录

  •  5
  • Michael Klement  · 技术社区  · 15 年前

    今天,当我尝试导入多个数据记录时,我注意到导入服务中有一个奇怪的行为。

    当我这样做时,所有数据记录都被导入,并且自动递增的值是正确的( 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 回复  |  直到 15 年前
        1
  •  6
  •   Nicholas Roeder    14 年前

    我也有同样的问题,结果证明问题是由于在映射类上重写了Equals。我的Equals方法只是比较主键字段,它是一个标识字段。当然,当对象是新的时,所有标识都是0。因此,当调用InsertAllOnSubmit时,它认为所有新对象都是相同的,基本上忽略了除第一个对象之外的所有对象。

        2
  •  2
  •   James    15 年前

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

    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();
    
        4
  •  1
  •   Derek Dunham    13 年前

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

    我的问题是我发送给 InsertAllOnSubmit<mappedClass>() mappedClass . 根据要添加到数据库中的视图模型的实例修改成员,然后将实例重新添加到列表中。

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

        5
  •  0
  •   Himanshu THE ONLY ONE    12 年前

    使用这个完美的解决方案。
    如前所述,我们有一个新的实体,如“TestTable”。
    在for循环中将此实体初始化为

    TestTable objTable = new TestTable ();
    

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