更新数据库,而不是在MVC控制器中添加行

时间:2019-05-03 22:12:37

标签: c# asp.net asp.net-mvc entity-framework model-view-controller

我有一些代码可以将新行添加到网站配置文件表中,但是当有人尝试更新配置文件时,我不确定该如何处理。我正在从控制器更新多个表。

我有以下代码。我在客户表中检查ID是否已存在,如果是,则更改要修改的实体的状态。(我在网上找到了此代码)。我注释掉了下一行,因为它给了我一个错误。

此代码在保存更改时不会引发任何错误,但不会更新数据库。

    var oldCustomer = _context.Customers.Find(objSv.CustomerServices.strUserID);
     var oldCustomerServices = _context.CustomerServices;

    if (oldCustomer == null) {
      _context.Customers.Add(obj);
      _context.CustomerServices.Add(objSv.CustomerServices);
        }
     else
     {
       _context.Entry(oldCustomer).State = EntityState.Modified;
 //  _context.Entry(oldCustomerServices).State = EntityState.Modified;
            }

   _context.SaveChanges();

我希望用新对象更新数据库。这些是我带有新数据的新对象

        CustomerProfile obj = GetCustomerProfile();
        ServiceProvider objSv = GetServiceProvider();`enter code here`

1 个答案:

答案 0 :(得分:0)

问题在以下行:

var oldCustomerServices = _context.CustomerServices;

此处_context.CustomerServices不是CustomerServices对象。它是DbSet中的CustomerService,但是您将其视为CustomerServices对象。

我认为您的代码应如下:

var oldCustomerServices = _context.CustomerServices.Find(CustomerServices.Id); // <-- I have assumed primary key name of `CustomerServices` is `Id`. If anything else then use that.

if(oldCustomerServices == null)
{
    CustomerServices newCustomerServices = new CustomerServices()
    {
      // Populate the customer service property here
    }
    _context.CustomerServices.Add(newCustomerServices);
} 
else
{
     _context.Entry(oldCustomerServices).State = EntityState.Modified;
}


var oldCustomer = _context.Customers.Find(objSv.CustomerServices.strUserID);

if (oldCustomer == null) 
{
   Customer newCustomer = new Customer()
   {
       // Populate the customer property here
   }

   _context.Customers.Add(newCustomer);
  _context.CustomerServices.Add(objSv.CustomerServices);
}
else
{
  _context.Entry(oldCustomer).State = EntityState.Modified;
}

_context.SaveChanges();