繁体   English   中英

错误“值不能是 null。 参数名称:entity”删除实体时object

[英]Error “Value cannot be null. Parameter name: entity” when deleting entity object

当我尝试删除实体时遇到一个奇怪的错误。 我正在使用实体框架 4、C# 和 ASP.NET MVC 3。

这是我的 controller 和 function 删除实体 object:

public class EmployeesController : Controller
{
    readonly IEmployeesRepository _employeesRepository;

    public EmployeesController()
    {
        _employeesRepository = new SqlEmployeesRepository();
    }

    public RedirectToRouteResult Delete(int id)
    {
        var employee = _employeesRepository.GetEmployee(id);
        _employeesRepository.DeleteEmployee(employee);
        TempData["message"] = employee.Name + " was deleted";
        return RedirectToAction("Index");
    }
}

和存储库代码:

public class SqlEmployeesRepository : IEmployeesRepository
{
    private readonly MyDBEntities _entities;

    public SqlAgencyTypesRepository()
    {            
        _entities = new MyDBEntities();
    }


    public IQueryable<Employee> Employees
    {
        get { return _entities.Employees.AsQueryable(); }
    }


    public Employee GetEmployee(int id)
    {
        return Employees.FirstOrDefault(e => e.EmployeeID == id);
    }


    public void DeleteEmployee(Employee employee)
    {
        _entities.Employees.Context.DeleteObject(employee);
        _entities.Employees.Context.SaveChanges();
    }
}

一些奇怪的事情:

  • 该项目确实被删除。 DeleteObject行出现错误,但仍将其删除。
  • 这不会发生在我的本地机器上,只会发生在生产中。 两者之间的唯一区别是连接字符串。

     <:-- Local conn string --> <.--<add name="MyDBEntities" connectionString="metadata=res.//*/Entities:MyDB.csdl|res.//*/Entities:MyDB.ssdl|res.//*/Entities;MyDB.msl.provider=System;Data;SqlClient.provider connection string=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB;mdf;Integrated Security=True;User Instance=True.MultipleActiveResultSets=True&quot." providerName="System:Data.EntityClient" />--> <.-- Production conn string --> <add name="MyDBEntities" connectionString="metadata=res://*/Entities.MyDB.csdl|res://*/Entities.MyDB.ssdl|res;//*/Entities.MyDB.msl;provider=System;Data.SqlClient;provider connection string=&quot;Server=mysite;com;Database=MyDB;User ID=***;Password=***;Trusted_Connection=True.Integrated Security=False.MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

有人知道这里发生了什么吗?

在 GetEmployee 中使用 Single 而不是 FirstOrDefault。 这将有助于排除与没有匹配 ID 的记录相关的问题。

在我看来,您应该使用: Remove() 而不是 Context.DeleteObject()

_entities.Employees.Remove(employee); _entities.SaveChanges();

还要检查您的“员工”是否没有外键引用,这可能会阻止删除此 object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM