Asp.net mvc 创建新实体并调用SaveChanges将其保存回数据库MVC
在下面的代码中,我试图将一个新设施添加到我的设施表中。Save方法调用DbContext SaveChanges。在SaveChanges执行之后,我希望newFacility会为它生成一个Id,但它不会,也不会保存到数据库中。我向设施数据库集添加新设施的方式是否有问题Asp.net mvc 创建新实体并调用SaveChanges将其保存回数据库MVC,asp.net-mvc,Asp.net Mvc,在下面的代码中,我试图将一个新设施添加到我的设施表中。Save方法调用DbContext SaveChanges。在SaveChanges执行之后,我希望newFacility会为它生成一个Id,但它不会,也不会保存到数据库中。我向设施数据库集添加新设施的方式是否有问题 [HttpPost] public ActionResult Create(CreateFacilityViewModel viewModel) {
[HttpPost]
public ActionResult Create(CreateFacilityViewModel viewModel)
{
if (ModelState.IsValid)
{
var facilities = _db.Facilities;
var newFacility = new Facility();
//newFacility.FacilityId = viewModel.FacilityId;
newFacility.FaclityName = viewModel.FaclityName;
newFacility.Address = viewModel.Address;
newFacility.City = viewModel.City;
newFacility.State = viewModel.State;
_db.Facilities.ToList().Add(newFacility);
_db.Save();
return RedirectToAction("detail", "facility", new { id = newFacility.FacilityId });
}
return View(viewModel);
}
设施看起来像这样
public DbSet<Facility> Facilities { get; set; }
IQueryable<Facility> IGolfDataSource.Facilities
{
get { return Facilities; }
}
改变
到
您希望将对象添加到上下文中,而不是列表中。更改
_db.Facilities.ToList().Add(newFacility);
到
您希望将对象添加到上下文中,而不是列表中。问题在于:
_db.Facilities.ToList().Add(newFacility);
当您调用ToList时,它正在内存中创建一个新列表,然后您将新的工具添加到新的内存列表中。相反,您希望将新设施直接添加到数据库集中:
_db.Facilities.Add(newFacility);
问题在于:
_db.Facilities.ToList().Add(newFacility);
当您调用ToList时,它正在内存中创建一个新列表,然后您将新的工具添加到新的内存列表中。相反,您希望将新设施直接添加到数据库集中:
_db.Facilities.Add(newFacility);
如果不想将设施公开为数据库集,则Add在设施上不可用(可选)。您可以在_db上创建AddFacility方法。在AddFacility方法中,您可以访问数据库集并使用它的Add方法。如果您不想将设施公开为数据库集,则Add在Facility上不可用。您可以在_db上创建AddFacility方法。在AddFacility方法中,您可以访问DbSet并使用它的Add方法。如果Add在facility上不可用,则需要更改_db上的facility类型。它应该作为一个DbSet公开。我通过返回IQueryable来公开一个DbSet。请参阅上面的代码。如果需要将IQueryable更改为DbSet,则添加将起作用。如果设备上没有添加,则需要更改_db上的设备类型。它应该作为一个DbSet公开。我通过返回IQueryable来公开一个DbSet。请参阅上面的代码。如果您需要将IQueryable更改为DbSet,则添加将起作用。