Entity framework 更新表中的两个字段

Entity framework 更新表中的两个字段,entity-framework,asp.net-mvc-4,c#-4.0,Entity Framework,Asp.net Mvc 4,C# 4.0,我有一个列表,希望更新表中的两个字段。 这两个字段是使用CatId的customOrderNumber和CustomerRefnumber 以标识行 如何根据这两个字段的Id更新这两个字段,以提高效率 这是模型 public class Catalog { public Int32 CatId { get; set; } public string Ischecked { get; s

我有一个列表,希望更新表中的两个字段。 这两个字段是使用CatId的customOrderNumber和CustomerRefnumber 以标识行

如何根据这两个字段的Id更新这两个字段,以提高效率

这是模型

            public class Catalog
            {
                public Int32 CatId { get; set; }
                public string Ischecked { get; set; }
                public string CustOrderNumber { get; set; }
                public string CustomerRefnumber { get; set; }
            }
下面是处理集合的方法

            public List<Catalog> WriteToDB(List<Catalog> objCat)
            {
                DataCollectEntities _objDataCollect = new DataCollectEntities();

                foreach( var item in objcat)
                {


                }

            }
public List WriteToDB(List objCat)
{
DataCollectEntities_objDataCollect=新的DataCollectEntities();
foreach(objcat中的变量项)
{
}
}

您需要从数据库中获取传递给方法的那些项的目录。更新每个项目的属性值并将其保存回

public List<Catalog> WriteToDB(List<Catalog> objCat)
{
    var ids = objCat.Select(s=>s.CatId);

    var db = new DataCollectEntities();
    var catalogList= db.Catalogs.Where(s=>ids.Contains(s.CatId)).ToList();

    foreach( var item in catalogList)
    {
      var c= objCat.FirstOrDefault(x=>x.CatId==item.Id);
      if(c!=null)
      {
        item.CustomerRefnumber = c.CustomerRefnumber;
        item.CustOrderNumber = c.CustOrderNumber ;
      }
    }
    db.SaveChanges();
}
public List WriteToDB(List objCat)
{
var id=objCat.Select(s=>s.CatId);
var db=新的DataCollectEntities();
var catalogList=db.Catalogs.Where(s=>ids.Contains(s.CatId)).ToList();
foreach(目录列表中的变量项)
{
var c=objCat.FirstOrDefault(x=>x.CatId==item.Id);
如果(c!=null)
{
item.CustomerRefnumber=c.CustomerRefnumber;
item.CustOrderNumber=c.CustOrderNumber;
}
}
db.SaveChanges();
}
执行的SQL查询数?

1select语句用于从数据库获取目录

Nupdate语句,用于更新每条记录,其中
N
是要更新的记录(目录)数量


因此,如果您试图更新3个目录,此代码将命中db1+3=4次。

在循环中执行此操作
var obj=\u objDataCollect.Catalog.Where(x=>x.CatId==item.CatId).Single()
然后使用新值更新此
obj
,如其他属性的
obj.customordernumber=item.customordernumber
相同。。。然后外部循环写入
\u objDataCollect.SaveChanges()
谢谢。你是说这样更有效。我可能有大约150行要更新。这是否意味着我将对数据库执行150次操作?ObjCat是我要用来更新数据库的新列表。您可以使用老式(但性能最好)ADO.NET对所有记录执行一个巨大的update语句。SQL字符串可能无法传递。因此,您可能需要将N条记录拆分为几个批并执行它。dbContext有一个
Database.ExecuteSqlCommand
方法,如果您愿意,可以使用该方法。