DbSet不包含SaveChanges的定义



我正在尝试删除数据网格中的一个选定行以及数据库中的同一行。

不过,我得到了一个错误,dbset不包含SaveChanges的定义。

林克和EF相对较新。有人知道这可能是从哪里来的吗?

private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
        using (EFContext db = new EFContext())
        {
            int proId = (ProductDatagrid.SelectedItem as Product).ProductID;
            Result result = (from r in db.products where r.ProductID == proId select r).SingleOrDefault();
            db.Product.Remove(result);
            db.Product.SaveChanges();
            ProductDatagrid.ItemsSource = db.Results.ToList();
        }
}

您可以从Remove()SaveChanges()方法中删除.Product。实体框架将跟踪Result result,以便它知道从哪个表中删除record,然后您可以调用db.SaveChanges()而不会出现任何错误,因为它是在DbContext(EfContext(上调用的:

   using (EFContext db = new EFContext())
    {
        int proId = (ProductDatagrid.SelectedItem as Product).ProductID;
        Result result = (from r in db.products where r.ProductID == proId select r).SingleOrDefault();
        // .Product removed
        db.Remove(result);
        db.SaveChanges();
        ProductDatagrid.ItemsSource = db.Results.ToList();
    }

但是,如果您想继续使用db.Product的语法,那么您也可以将Result对象附加到dbContext,而不需要像以下这样的查询:

   using (EFContext db = new EFContext())
    {
        int proId = (ProductDatagrid.SelectedItem as Product).ProductID;
        Result result = new Result { ProductId = proId};
        db.Product.Attach(result);
        db.Product.Remove(result);
        db.Product.SaveChanges();
        ProductDatagrid.ItemsSource = db.Results.ToList();
    }

或者,您可以将实体状态设置为已删除并以这种方式删除:

   using (EFContext db = new EFContext())
    {
        int proId = (ProductDatagrid.SelectedItem as Product).ProductID;
        Result result = new Result { ProdId = proId };
        db.Entry(result).State = EntityState.Deleted;
        db.SaveChanges();
        ProductDatagrid.ItemsSource = db.Results.ToList();
    }

最新更新