的Ack!我是Entity Framework的新手,我正在尝试找到删除项目的最简单方法。
我有一个列表框,数据源设置为数据库中的TagCategory对象。这工作正常。现在我想删除所选项目。所以我做了这样的事情:
TagCategory category = (TagCategory)lstCategories.SelectedItem;
using (MyEntities context = new MyEntities())
{
context.AttachTo("TagCategories", category);
context.DeleteObject(category);
context.SaveChanges();
}
这似乎很直接,但它不起作用。什么都没有删除,没有错误信息,没有。
所以我觉得我可以这样做:
using (MyEntities context = new MyEntities())
{
string cmd = String.Format("DELETE FROM TagCategory WHERE TagCatID=@ID",
category.TagCatID));
context.ExecuteStoreCommand(qry);
}
这似乎有效。那么我只是去做有效的工作,或者实体框架4实际上能够做到这一点吗?
编辑:没关系。事实上,我有另一个问题阻止代码表单执行。我发布的两个片段似乎都运行正常。我道歉。
答案 0 :(得分:6)
您可以使用存根实体,如下所示:
using (var context = new MyEntities())
{
var tagCategory = new TagCategory
{
PostId = category.TagCatID
};
context.TagCategories.Attach(tagCategory);
context.DeleteObject(tagCategory);
context.SaveChanges();
}
答案 1 :(得分:2)
我不确定您是否可以使用AttachTo()
。取决于你如何填充ListBox。
什么应该有效:
var Key = context.CreateEntityKey("TagCategory", category);
Object original;
if (context.TryGetObjectByKey(Key, out original))
{
context.DeleteObject(original);
context.SaveChanges();
}
答案 2 :(得分:0)
// using the Find method of DBContext to retrieve the record you wish to delete
// works for me
// below code taken from a working WPF application using sdf database
if (this.TransactionsDataGrid.SelectedIndex > -1)
{
Transaction transaction = this.TransactionsDataGrid.SelectedItem as Transaction;
if (transaction != null)
{
using (BilliEntities context = new BilliEntities())
{
try
{
Transaction trans = context.Transactions.Find(transaction.TransactionId);
if (trans != null)
{
// observable collection for datagrid
this.Transactions.Remove(transaction);
context.Transactions.Remove(trans);
context.SaveChanges();
}
}
catch (Exception ex)
{
// for debugging
}
}
}
}