如何检测 1-N 上的变化
本文关键字:1-N 变化 检测 何检测 | 更新日期: 2023-09-27 18:33:48
简单的问题。我在使用 NHibernate 时没有遇到这个问题,但现在我在 EntityFramework 中遇到了这个问题:
想象一下,我有一辆车,上面有轮胎清单。
我想拆掉汽车的 1 个轮胎,所以我想更新它。像这样:
Car.Tires.Remove(tire);
然后我用这个更新方法更新汽车对象:
public virtual void Update(T obj)
{
TryAttach(obj);
SetAllModified(obj);
SaveChanges();
}
问题是更新后,汽车仍然具有相同数量的轮胎。
调用更新方法时如何更新轮胎列表?
您需要在数据库中找到轮胎,然后将其删除:
var tire=context.Tires.Where(t=>t.Name==tireName).Single();
Car.Tires.Remove(tire);
context.SaveChanges();
首先,你的设置方式有点奇怪......如果没有更多的代码,很难弄清楚你在做什么,但如果我自己使用实体框架来做这件事,这就是我所期望的。
首先。。。你需要一个 DbContext,你的上下文看起来像这样......
public class SomeContext : DbContext
{
public DbSet<Car> Cars { get; set; }
public DbSet<Tyre> Tires { get; set; }
}
然后一些波科斯...
public class Car {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual List<Tyre> Tires { get; set; }
}
public class Tyre {
public virtual int Id { get; set; }
// More properties...
[ForeignKey("CarId")]
public virtual int CarId { get; set; }
public virtual Car Car { get; set; }
}
那么我希望你做这样的事情......经过漫长的一天后,我的大脑工作起来并不完全相同,但基本上......从从数据库中加载的 Car 对象中删除不再需要的轮胎,然后保存更改。
using (var context = new SomeContext())
{
var car = context.Cars.Find(carId);
var tyre = car.Tires.Single(t => t.Id == tireId);
car.Tires.Remove(tyre);
context.SaveChanges();
}
希望这有帮助。