我们假设我有以下类生成了表格:
public class Car
{
public Guid Id { get; set; }
public Guid OwnerId { get; set; }
public string Color { get; set; }
public virtual Owner Owner { get; set; }
}
public class Owner
{
public Guid Id { get; set; }
public string Name { get; set; }
public ICollection<Car> Cars { get; set; }
}
在我的DbContext类中,我正在创建一个删除汽车的方法。我想知道以下两种方法之间的区别是什么,以及我使用哪种方法很重要:
方法1:
public class CarDbContext : DbContext
{
public DbSet<Car> Car { get; set; }
public DbSet<Ownerr> Owner { get; set; }
public CarDbContext(string cs) : base (cs) {}
public void RemoveCar(Car car)
{
Car.Attach(car);
Car.Remove(car);
SaveChanges();
}
}
方法2:
public class CarDbContext : DbContext
{
public DbSet<Car> Car { get; set; }
public DbSet<Ownerr> Owner { get; set; }
public CarDbContext(string cs) : base (cs) {}
public void RemoveCar(Car car)
{
Entry(car).State = EntityState.Deleted;
SaveChanges();
}
}
如果我现在要删除所有者,因为汽车是依赖的,我现在使用的方法是否重要?
答案 0 :(得分:1)
以下两种方法之间的区别是什么?如果重要的是我使用哪种方法
假设您实际使用的代码与您上面的代码类似,没有太大区别,因为您立即保存并且您没有任何家属,但我相信您可能仍有一些差异想要了解未来。
方法1:附加,删除,保存
当调用Remove()时,EF将停止更改跟踪,将您的实体标记为已删除,并对任何相关实体和关系进行一些额外的工作。
方法2:标记为已删除
您的实体被标记为已删除。调用SaveChanges()时,EF会生成并执行删除查询。假设没有发生外键违规,记录就消失了。我不相信上面提到的额外工作已经完成,但我不记得。
如果我现在要删除所有者,因为汽车是依赖的,我现在使用的方法是否重要?
对于这部分问题,this回答很好地解释了不同的方法,并可能从我所解释的内容中进一步澄清。