我目前遇到EF怪异的问题。假设我的数据库中包含以下信息。部门ID是“部门”表的外键。
每当我通过调用DbContext.Update方法对此记录进行更新时,它将Department ID设置为null。唯一不这样做的时间是当我更改部门ID本身时。
var employeeDto = new EmployeeDto
{
Id = 3 // assume that the primary key of this record is 3.
Name = "Motea Dave",
UserId = "123123",
DepartmentId = 3
};
var employee = Mapper.Map<Employee>(employeeDto);
_employeeRepository.Update(employee, employee.Id);
_unitOfWork.SaveChanges(); // When I set my breakpoint here and inspect _employeeRepository I can already see that the DepartmentId has been set to null.
//Employee Repository
public class EmployeeRepository : RepositoryBase<Employee>
{
// Repository code here...
}
//Repository Base
public abstract class RepositoryBase<T> where T : class
{
private readonly IUnitOfWork unitOfWork
public RepositoryBase(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
public virtual void Update(T entity, int id)
{
var item = this.Dataset.Find(id);
item.Copy(entity);
item.Id = id;
this.unitOfWork.Context.Update<T>(item); //unitOfWork.Context is basically DbContext of Entity Framework.
}
}
删除Update方法并直接调用SaveChanges()也无济于事。
答案 0 :(得分:1)
这似乎是一个 AutoMapper 问题,而不是Entity Framework
{'good_friend': ['good'], 'hello_friend': ['hello'], 'hi_friend': ['hi']}
如果此行将您的var employee = Mapper.Map<Employee>(employeeDto);
设置为null,请查阅您的映射并确保您没有忽略该属性,或者需要对其进行映射
更新
不是。在执行_
DepartmentId
之前,我检查了 首先是员工变量,然后是DepartmentId(3)。它 一旦执行_employeeRepository.Update(),它将变为null 令人困惑的方法。
然后可能与您的存储库代码有关,对于实体框架而言,使用employeeRepository.Update()
和Attach
来使值无效的可能性很小
但是,您将需要在问题中放入相关的存储库代码