DbSet 不包含 SaveChanges 的定义

DbSet does not contain definition for SaveChanges

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

虽然 dbset 不包含 SaveChanges.

的定义,但我收到一个错误

Linq 和 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() 方法中删除 .ProductResult result 将由 Entity Framework 跟踪,因此它将知道要从哪个 table 中删除您的 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();

    }