У меня есть такой репозиторий:
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();
}
}
Теперь это действительно работает для всех скалярных свойств объекта, но все остальные объекты, которые связаны со свойствами объекта typeOf(T)
, не волнуютэто состояние объекта изменяется, и EF просто добавляет новые данные.
Итак, если вы, например, наберете Repository<Student>.Update()
, и вы только изменили имя, он найдет нужного студента и изменит его имя, но также изменит кампус, хотя у вас уже есть связанный кампусс этим студентом, он будет снова создан с другим CampusId.
Покажите мне, пожалуйста, правильный способ обновления в этой ситуации.