使用EF6删除数据库记录

时间:2017-03-17 20:13:57

标签: c# asp.net entity-framework entity-framework-6 asp.net-mvc-5

我们假设我有以下类生成了表格:

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

如果我现在要删除所有者,因为汽车是依赖的,我现在使用的方法是否重要?

1 个答案:

答案 0 :(得分:1)

  

以下两种方法之间的区别是什么?如果重要的是我使用哪种方法

假设您实际使用的代码与您上面的代码类似,没有太大区别,因为您立即保存并且您没有任何家属,但我相信您可能仍有一些差异想要了解未来。

方法1:附加,删除,保存

当调用Remove()时,EF将停止更改跟踪,将您的实体标记为已删除,并对任何相关实体和关系进行一些额外的工作。

方法2:标记为已删除

您的实体被标记为已删除。调用SaveChanges()时,EF会生成并执行删除查询。假设没有发生外键违规,记录就消失了。我不相信上面提到的额外工作已经完成,但我不记得。

  

如果我现在要删除所有者,因为汽车是依赖的,我现在使用的方法是否重要?

对于这部分问题,this回答很好地解释了不同的方法,并可能从我所解释的内容中进一步澄清。