我的通用存储库的想法是更新整个aggeregate。
例如,CarPark有多辆汽车。因此,如果我通过CarPark对象更新Car,则应在我的数据库中更新汽车。
var carPark = _carParkRepository.GetAll(cp => cp.Cars).SingleOrDefault();
carPark.Name = "Changed carpark";
carPark.Cars.ElementAt(0).Plate = "changedCar";
_carParkRepository.AddOrUpdate(carPark);
存储库实现:
public void Update(TEntity entity)
{
EntityEntry dbEntityEntry = _context.Entry(entity);
dbEntityEntry.State = EntityState.Modified;
context.SaveChanges();
}
在这种情况下,CarPark的名称将在我的数据库中更新,但车牌不会更新。
这个answer描述了一种在ef6中使用"绘制状态"的方法。
这也是ef核心中通用存储库的最佳解决方案吗?