我有一个类似这样的代码库:
public class Repository<T> : IRepository<T> where T : class
{
private readonly IRepositoryContext _repositoryContext;
public Repository(IRepositoryContext repositoryContext)
{
_repositoryContext = repositoryContext;
_objectSet = repositoryContext.GetObjectSet<T>();
}
public virtual void Update(T entity)
{
ObjectSet.AddObject(entity);
_repositoryContext.ObjectContext.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
_repositoryContext.SaveChanges();
}
}
现在,这适用于实体的所有标量属性,但与实体属性相关的所有其他实体并不关心实体状态被修改,EF只是添加新数据。
因此,如果您例如执行
Repository<Student>.Update()
,并且只更改了名称,则它将找到正确的学生并更改其姓名,但它也将更改校区,尽管您已经有一个与该学生关联的校区,但将创建具有不同CampusId的新校区。请展示正确的更新方法。