【问题标题】:inserting multiple lines to a database table using LINQ query使用 LINQ 查询向数据库表中插入多行
【发布时间】:2016-02-17 07:42:31
【问题描述】:

我正在尝试将所有 ith 值插入到名为 AB_Product_vs_Field 的表中,但它只插入最后一个 i

这是 LINQ 查询

for (int i = 0; i < product.ListProductFields.Count; i++)
{
   insertproductvalue.Product_ID = product.Product_ID;
   insertproductvalue.Field_ID = product.ListProductFields[i].ProductFieldID;
   insertproductvalue.Field_Value_EN = product.ListProductFields[i].Field_Value_EN;                         
};

db.AB_Product_vs_Field.Add(insertproductvalue);
db.SaveChanges();

如何一一插入所有这些行

【问题讨论】:

  • db.AB_Product_vs_Field.Add(insertproductvalue); 放入for 循环中(您目前只添加最后一个)。你真的应该在 for 循环中初始化一个新的 insertproductvalue 实例。
  • @StephenMuecke 然后我得到这个 SystemInvalidOperationException:{"The property 'Field_ID' is part of the object's key information and cannot be modified. "}
  • 那么如果是PK字段,去掉insertproductvalue.Product_ID = product.Product_ID;(保存时会自动生成)- 还是在编辑已有对象?
  • Product_IDField_ID 是这里的复合主键,这些是 varchar 字段,用户必须使用前端视图页面插入 Product_IDField_ID 我正在使用以下行查看页面@Html.HiddenFor(m =&gt; m.ListProductFields[i].ProductFieldID)

标签: c# asp.net-mvc linq asp.net-mvc-3 razor


【解决方案1】:

我看不到您是如何创建 insertproductvalue 的,但我想您的代码应该如下所示:

var listInsertproductvalue = new List<AB_Product_vs_Field>(); //you creating list of your entities
for (int i = 0; i < product.ListProductFields.Count; i++)
{
   listInsertproductvalue.Add(new AB_Product_vs_Field 
   {
      Product_ID = product.Product_ID, 
      Field_Value_EN = product.ListProductFields[i].Field_Value_EN
   }); //here you create your entity and add it to List
};
db.AB_Product_vs_Field.AddRange(listInsertproductvalue); //here you add all new entities to context
db.SaveChanges();

在这里,您创建空的List 实体,填充它,然后使用AddRange() 方法将列表添加到您的上下文中。

【讨论】:

  • 一旦我使用了你的解决方案,它保存了最后一个ith 值,我检查了两次,用 DB,我该怎么办
  • @kez 我更新了答案。您始终可以创建实体列表,然后使用 AddRange。
  • @teovankot 在这段代码 sn-p 我已经定义了 insertproductvalue 对象,如下所示 AB_Product_vs_Field insertproductvalue = new AB_Product_vs_Field(); 。我可以在这里使用该对象而不是 var listInsertproductvalue = new List&lt;AB_Product_vs_Field&gt;(); 吗?
【解决方案2】:

你只需要写下那一行:

db.AB_Product_vs_Field.Add(insertproductvalue);

在for中并在for之外保存。

【讨论】:

  • 一旦我使用了你的解决方案,它最后保存的ith 值
  • 尝试保存更改。可以解决问题。
【解决方案3】:

我在这里假设的事情很少,但它有一种非常简短和甜蜜的方式来做到这一点。我有点盲目,因为我需要有关代码的更多信息,即变量声明

假设product.ListProductFields 是您的List 某个对象,该对象具有要插入的所有行:

第一种方式:

product.ListProductFields.Foreach(objEach=>{
db.AB_Product_vs_Field.Add((objEach); /* First we can get, .productId, .FeildId etc inside the function*/
// OR 
// db.AB_Product_vs_Field.Add((objEach.Product_ID, objEach.ProductFieldID, objEach.Field_Value_EN;);

});
db.SaveChanges();

还有一种更简单的方法是拥有一个List&lt;&lt;&lt;insertproductvalue&gt;&gt;&gt;,它是您的自定义类对象的列表,其中每个对象都将添加属性,并且该对象将添加到您的自定义类对象列表中,然后再次,我们可以使用上面的代码将行插入到数据库中。

第二种方式:

var lstinsertproductvalue=new List<<*CLASSTYPE*>>();
for (int i = 0; i < product.ListProductFields.Count; i++)
            {
insertproductvalue=new <<*CLASSTYPE*>>();
                insertproductvalue.Product_ID = product.Product_ID;
                insertproductvalue.Field_ID = product.ListProductFields[i].ProductFieldID;
                insertproductvalue.Field_Value_EN = product.ListProductFields[i].Field_Value_EN;
lstinsertproductvalue.Add(insertproductvalue); 
// Here you have created a list your-self assuming that product.ListProductFields is not a list. 
            };

lstinsertproductvalue.Foreach(objEach=>{
db.AB_Product_vs_Field.Add((objEach); /* First we can get, .productId, .FeildId etc inside the function*/
// OR 
// db.AB_Product_vs_Field.Add((objEach.Product_ID, objEach.ProductFieldID, objEach.Field_Value_EN;);    
});
db.SaveChanges();

【讨论】:

  • 这不是一个好主意,在每个实体添加上调用db.SaveChanges();
  • 收到此错误'IList&lt;AB_ProductTypeCategoryField&gt;' does not contain a definition for 'Foreach' and no extension method 'Foreach' accepting a first argument of type 'IList&lt;AB_ProductTypeCategoryField&gt;' could be found
  • @kez ;能否请您给我完整的相关代码,也就是变量声明,因为它真的会帮助我正确更新您。
  • @teovankot ;谢谢我忘了把它带到外面反正已经相应地更新了代码。
  • @kez : 你可以试试第二种方法,我感觉可能会出现这个错误,所以只编辑了帖子,也保留了第二种方法。
猜你喜欢
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 2015-01-19
  • 2015-05-14
  • 1970-01-01
相关资源
最近更新 更多