C# 使用LINQ查询向数据库表插入多行
我正在尝试将所有C# 使用LINQ查询向数据库表插入多行,c#,asp.net-mvc,linq,asp.net-mvc-3,razor,C#,Asp.net Mvc,Linq,Asp.net Mvc 3,Razor,我正在尝试将所有Ith值插入名为AB_Product\u vs_字段的表中,但它只插入最后一个I值 这就是LINQ查询 for (int i = 0; i < product.ListProductFields.Count; i++) { insertproductvalue.Product_ID = product.Product_ID; insertproductvalue.Field_ID = product.ListProductFields[i].ProductFie
I
th值插入名为AB_Product\u vs_字段的表中
,但它只插入最后一个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();
for(int i=0;i
如何一行一行地插入所有这些行您只需将该行插入即可:
db.AB_Product_vs_Field.Add(insertproductvalue);
在for中,将save保存在for之外。我看不出如何创建
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();
var listInsertproductvalue=new List()//您正在创建实体的列表
for(int i=0;i
在这里,您创建实体的空
列表
,填充它,然后使用AddRange()
方法将列表添加到您的上下文中。我在这里假设几件事,但它有一个非常短而甜美的方法。我有点盲目,因为我需要更多关于代码的信息,即变量声明
假设product.ListProductFields
是某个对象的列表,其中包含所有要插入的行:
第一种方式:
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();
还有一种更简单的方法,就是创建一个列表
,其中是自定义类对象的列表,每个对象都将添加属性,并且该对象将添加到自定义类对象的列表中,然后我们可以再次使用上面的代码将行插入数据库
第二种方式:
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();
var lstinertproductvalue=new List();
for(int i=0;i{
db.AB_Product_vs_Field.Add((objEach);/*首先,我们可以在函数中获得.productId.FeildId等*/
//或
//db.AB_Product_vs_Field.Add((objEach.Product_ID,objEach.ProductFieldID,objEach.Field_Value_EN;);
});
db.SaveChanges();
Putdb.AB\u Product\u vs\u字段。Add(insertproductvalue);
在for
循环中(您当前只添加了最后一个)。并且您确实应该在for
循环中初始化insertproductvalue
的新实例。@StephenMuecke然后我得到这个SystemInvalidOperationException:{“属性'Field_ID'是对象关键信息的一部分,不能修改。”}
如果它是PK字段,请删除insertproductvalue.Product_ID=Product.Product_ID;
(保存时会自动生成)-或者您正在编辑现有对象?Product\u ID
和Field\u ID
是这里的复合主键,这些是varchar字段,用户必须使用前端视图页面插入Product\u ID
,Field\u ID
在查看页面@Html.HiddenFor(m=>m.ListProductFields[i].ProductFieldID)
一旦我使用了您的解决方案,它的保存最后一个I
th值,我检查了两次,用DB,我应该怎么做do@kez我更新了答案。您始终可以创建实体列表,然后使用AddRange。@teovankot在这个代码段中,我定义了insertproductvalue对象,如下所示t_vs_Field();
。我可以在这里使用该对象而不是var listInsertproductvalue=new List();
吗?一旦我使用了您的解决方案,它的最后一次保存I
th值请尝试在for上保存更改。这样可以解决问题。调用db.SaveChanges();
在每个实体上添加。获取此错误'IList'不包含'Foreach'的定义,并且找不到接受'IList'类型的第一个参数的扩展方法'Foreach'。
@kez;请您也给我变量声明的完整相关代码,因为它将真正帮助我更新您的属性rly.@teovankot;谢谢,我忘了把它带到外面去了。我已经相应地更新了代码。@kez:你可以试试第二种方法,我觉得可能会发生这个错误,所以我只编辑了这篇文章,并保留了第二种方法。