C# 如何使用entity framework在数据库上同时保存多个对象
我试图添加一个对象列表,并将它们一次性保存到数据库中。 问题是数据库中只保存最后保存的Id! 我的代码是这样的:C# 如何使用entity framework在数据库上同时保存多个对象,c#,entity-framework,C#,Entity Framework,我试图添加一个对象列表,并将它们一次性保存到数据库中。 问题是数据库中只保存最后保存的Id! 我的代码是这样的: public void MapCarIdToDepartment(int DepartmentId, List<Guid> carIds) { var departmentCar = new DepartmentCar(); foreach (var item in carIds) { departmentCar.CarId = item;
public void MapCarIdToDepartment(int DepartmentId, List<Guid> carIds)
{
var departmentCar = new DepartmentCar();
foreach (var item in carIds) {
departmentCar.CarId = item;
departmentCar.DepartmentId = DepartmentId;
departmentCar.State = ObjectState.Added;
Save(departmentCar);
}
}
注意:我使用的是存储库模式您每次都在更新相同的实体引用。将新DepartmentCar的声明移动到循环内
public void MapCarIdToDepartment(int DepartmentId, List<Guid> carIds)
{
foreach (var item in carIds)
{
var departmentCar = new DepartmentCar
{
CarId = item,
DepartmentId = DepartmentId
};
Save(departmentCar);
}
}
理想情况下,您应该做的只是创建一辆新车,将其添加到DbContext的Cars DbSet中,然后在完成之后,在最后对上下文调用SaveChanges。虽然对于ID,如果可以获得现有的汽车,您需要检查现有对象的上下文以更新,而不是创建新的对象
public void MapCarIdToDepartment(int departmentId, List<Guid> carIds)
{
using (var context = new CarContext())
{
foreach (var carId in carIds)
{
var car = context.DepartmentCars.SingleOrDefault(x => x.CarId == carId);
if (car == null)
{
car = new DepartmentCar{ CarId = carId };
context.DepartmentCars.Add(car);
}
car.DepartmentId = departmentId;
}
context.SaveChanges();
}
}
这将检查现有汽车,必要时进行更新,或创建新汽车并进行更新。如果创建一个实体相当复杂,那么创建一个工厂方法,比如createCarcarId、[+其他必需的值/引用],以使代码易于理解
从这里考虑依赖注入或DbWork的一个工作单元,而不是在方法/类中重新初始化上下文。DbContexts是一个功能强大的工具,您可以利用它,所以我不建议尝试将它们隐藏在传统的CRUD包装器接口后面。获取、保存等。
因此,您将newItem传递给Save方法,而您共享的代码中似乎没有任何名称newItem。是否应该取消departmentCar?添加详细信息,提供保存方法的定义。它是否包含context.savechanges?@shahzad它是错误的,我编辑了它。@TanvirArjel保存方法很好,别担心!下面史蒂夫的答案就足够了!谢谢你们,史蒂夫!这么好的建议,我完全同意,但我不得不这样做。