“错误”值不能为空.参数名称:entity"删除实体对象时
本文关键字:quot entity 删除 对象 实体 错误 不能 参数 | 更新日期: 2023-09-27 18:05:34
当我试图删除一个实体时,我得到了一个奇怪的错误。我使用实体框架4,c#和ASP。. NET MVC 3.
这是我的控制器和删除实体对象的函数:
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="Data Source=.'SQLEXPRESS;AttachDbFilename=|DataDirectory|'MyDB.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True"" 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="Server=mysite.com;Database=MyDB;User ID=***;Password=***;Trusted_Connection=True;Integrated Security=False;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
有人知道这里发生了什么吗?
在GetEmployee中使用Single而不是FirstOrDefault。这将有助于排除与没有匹配ID的记录相关的问题。
我认为你应该使用:Remove()而不是Context.DeleteObject()
_entities.Employees.Remove(employee);
_entities.SaveChanges();
还要检查你的"Employee"是否没有外键引用,这可能会阻止删除这个对象。