如何检测1-N的变化

时间:2014-12-10 16:49:45

标签: c# .net entity-framework

简单的问题。我没有使用NHibernate来解决这个问题,但是现在我使用了EntityFramework:

想象一下,我有一辆车,里面有轮胎清单。

我想删除一辆汽车的轮胎,所以我想更新它。 类似的东西:

Car.Tires.Remove(tire);

然后我用这个更新方法更新汽车对象:

public virtual void Update(T obj)
{
     TryAttach(obj);
     SetAllModified(obj);
     SaveChanges();
}

问题是在更新后,汽车仍然有相同数量的轮胎。

当我调用更新方法时,如何更新轮胎列表?

2 个答案:

答案 0 :(得分:0)

您需要在数据库中找到轮胎,然后将其删除:

var tire=context.Tires.Where(t=>t.Name==tireName).Single();
Car.Tires.Remove(tire);
context.SaveChanges();

答案 1 :(得分:0)

首先,你设置的方式有点奇怪...没有更多的代码就很难弄清楚你在做什么但是如果我自己做的话,这就是我的期望实体框架。

首先......你需要一个DbContext,你的上下文看起来像这样......

public class SomeContext : DbContext
{
    public DbSet<Car> Cars { get; set; }
    public DbSet<Tyre> Tires { get; set; }
}

然后是一些pocos ......

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();
}

希望这有帮助。