DbContext.Update方法将我的外键设置为Null

时间:2018-08-09 04:12:00

标签: c# entity-framework-6

我目前遇到EF怪异的问题。假设我的数据库中包含以下信息。部门ID是“部门”表的外键。

enter image description here

每当我通过调用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()也无济于事。

1 个答案:

答案 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来使值无效的可能性很小

但是,您将需要在问题中放入相关的存储库代码