我正在尝试删除数据网格中的一个选定行以及数据库中的同一行。
不过,我得到了一个错误,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();
}