C# 我们可以在实体框架中附加多个对象并保存一次更改吗

C# 我们可以在实体框架中附加多个对象并保存一次更改吗,c#,entity-framework,entity-framework-6,updates,C#,Entity Framework,Entity Framework 6,Updates,我正在使用Visual Studio 2012和Entity Framework 6.0,我正在做一些CRUD操作,但现在我面临一些挑战 我在一个表单中输入多个条目,并希望立即更新或保存这些详细信息,因此我现在这样做: 创建对象并存储值,通过逐个附加和保存更改来添加/更新 但我可以像附加类的多个对象那样做吗?最后我是说在for循环之后做savechanges。那么,通过附加多个对象来保存多个savechanges是否正在运行 例如: for(int i=0; i < comingreque

我正在使用Visual Studio 2012和Entity Framework 6.0,我正在做一些CRUD操作,但现在我面临一些挑战

我在一个表单中输入多个条目,并希望立即更新或保存这些详细信息,因此我现在这样做:

创建对象并存储值,通过逐个附加和保存更改来添加/更新

但我可以像附加类的多个对象那样做吗?最后我是说在for循环之后做
savechanges
。那么,通过附加多个对象来保存多个
savechanges
是否正在运行

例如:

for(int i=0; i < comingrequestdata.Count(); i++)
{
    ObjectExample obj = new ObjectExampole();

    obj.Value1 = comingrequestdata[i].Value1;
    obj.Value2 = comingrequestdata[i].Value2;
    obj.Value3 = comingrequestdata[i].Value3;

    context.ObjectExamples.Attach(obj);
}

context.SaveChanges();
for(int i=0;i

我可以这样做吗?我有点困惑,请有人帮帮我。

您可以按如下所示进行尝试

附加

如果数据库中已经存在一个实体,并且 手动构造实体后,请使用
.Attach

.AddObject

如果您有一个全新的对象,请使用
.AddObject

for(int i=0;i
您可以按如下所示进行尝试

附加

如果数据库中已经存在一个实体,并且 手动构造实体后,请使用
.Attach

.AddObject

如果您有一个全新的对象,请使用
.AddObject

for(int i=0;i
如果要将所有行添加为新行,请执行以下操作:

for(int i=0; i < comingrequestdata.Count(); i++)
{
    //ObjectExample obj = new ObjectExampole();
    context.ObjectExamples.Add( new ObjectExample {
        Value1 = comingrequestdata[i].Value1,
        Value2 = comingrequestdata[i].Value2,
        Value3 = comingrequestdata[i].Value3
    }

}
context.SaveChanges();
for(int i=0;i
如果要修改数据库中的现有值(您需要一个主键来标识记录,以便从数据库中获取记录、修改记录,然后将其保存回数据库),则需要执行以下操作:

或者,如果其中一个可以唯一标识记录,则可以使用Value1/Value2/Value3中的一个

for(int i=0; i < comingrequestdata.Count(); i++)
{
    ObjectExample obj = context.ObjectExamples.Where(o => o.ID == Value4); // this is the unique id, assuming it is called ID in the database and Value4 stores its value in your code

    obj.Value1 = comingrequestdata[i].Value1;
    obj.Value2 = comingrequestdata[i].Value2;
    obj.Value3 = comingrequestdata[i].Value3;
    context.ObjectExamples.Attach(obj);
    context.Entry(obj).State = EntityState.Modified;
}
context.SaveChanges();
for(int i=0;io.ID==Value4);//这是唯一的ID,假设它在数据库中被称为ID,Value4在代码中存储它的值
obj.Value1=comingrequestdata[i].Value1;
obj.Value2=comingrequestdata[i].Value2;
obj.Value3=comingrequestdata[i].Value3;
ObjectExamples.Attach(obj);
context.Entry(obj.State=EntityState.Modified;
}
SaveChanges();

如果要将所有行添加为新行,请执行以下操作:

for(int i=0; i < comingrequestdata.Count(); i++)
{
    //ObjectExample obj = new ObjectExampole();
    context.ObjectExamples.Add( new ObjectExample {
        Value1 = comingrequestdata[i].Value1,
        Value2 = comingrequestdata[i].Value2,
        Value3 = comingrequestdata[i].Value3
    }

}
context.SaveChanges();
for(int i=0;i
如果要修改数据库中的现有值(您需要一个主键来标识记录,以便从数据库中获取记录、修改记录,然后将其保存回数据库),则需要执行以下操作:

或者,如果其中一个可以唯一标识记录,则可以使用Value1/Value2/Value3中的一个

for(int i=0; i < comingrequestdata.Count(); i++)
{
    ObjectExample obj = context.ObjectExamples.Where(o => o.ID == Value4); // this is the unique id, assuming it is called ID in the database and Value4 stores its value in your code

    obj.Value1 = comingrequestdata[i].Value1;
    obj.Value2 = comingrequestdata[i].Value2;
    obj.Value3 = comingrequestdata[i].Value3;
    context.ObjectExamples.Attach(obj);
    context.Entry(obj).State = EntityState.Modified;
}
context.SaveChanges();
for(int i=0;io.ID==Value4);//这是唯一的ID,假设它在数据库中被称为ID,Value4在代码中存储它的值
obj.Value1=comingrequestdata[i].Value1;
obj.Value2=comingrequestdata[i].Value2;
obj.Value3=comingrequestdata[i].Value3;
ObjectExamples.Attach(obj);
context.Entry(obj.State=EntityState.Modified;
}
SaveChanges();

添加新项目和更新修改后的项目并不像只调用一个方法那样简单。您需要区分何时添加新项目或何时更新。但是,您可以提交多个要更新或添加为新项目的项目。例如,此方法可以帮助您添加和更新实体:

public SomeEntity AddOrUpdate(SomeEntity item)
{
    var original = _context.SomeDbSet.Local.FirstOrDefault(p => p.Id == item.Id) 
                   ?? _context.SomeDbSet.FirstOrDefault(p => p.Id == item.Id);

    if (original != null) // Updating
    {
        var entry = _context.Entry(original);
        entry.CurrentValues.SetValues(item);
    }
    else
    {
         // New item
         item = _context.SomeDbSet.Add(item);
    }

    return item;
}

在多次调用此方法后,对基于
DbContext
的对象调用
SaveChanges

添加新项目和更新修改的项目并不像只调用一个方法那样简单。您需要区分何时添加新项目或何时更新。但是,您可以提交多个项目o可以更新或添加为新。例如,此方法可以帮助您添加和更新实体:

public SomeEntity AddOrUpdate(SomeEntity item)
{
    var original = _context.SomeDbSet.Local.FirstOrDefault(p => p.Id == item.Id) 
                   ?? _context.SomeDbSet.FirstOrDefault(p => p.Id == item.Id);

    if (original != null) // Updating
    {
        var entry = _context.Entry(original);
        entry.CurrentValues.SetValues(item);
    }
    else
    {
         // New item
         item = _context.SomeDbSet.Add(item);
    }

    return item;
}

多次调用此方法后,在基于
DbContext
的对象上调用
SaveChanges

谢谢你们的回答,我和你们都做过类似的事情 只需创建表的对象,我的意思是类,如:

EntityFrameworkEntities db = new EntityFrameworkEntities();

Classname obj = new Classname();
obj.updatefirstvalue = something;
obj.updatesecondvalue = something;

db.Entry(obj).State = EntityState.Modified;
db.SaveChanges();
就这样。我们还可以添加更多的类,以便最后使用savechanges进行更新,如:

 foreach(var item in collection){
    Classname obj = new Classname();
    obj1.updatefirstvalue = item.something;
    obj1.updatesecondvalue = item.something;

    db.Entry(obj).State = EntityState.Modified;
    }
 db.SaveChanges();

谢谢你们的回答,我和你们都做过了