【发布时间】:2014-05-21 22:05:53
【问题描述】:
确认!我是 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);
}
这似乎行得通。那么我应该选择可行的方法,还是 Entity Framework 4 真的能够做到这一点?
编辑:没关系。事实上,我遇到了另一个阻止代码表单执行的问题。我发布的两个 sn-ps 似乎都可以正常工作。我很抱歉。
【问题讨论】:
-
顺便说一句,尽量不要在上下文中使用
AttachTo。使用ObjectSet<T>.Attach。例如context.TagCategories.Attach(category)。同样context.Categories.Delete(category)而不是context.DeleteObject(category)。 -
@RPM1984:我想知道这两种语法是否做同样的事情。你能说一下为什么实体上的 Attach() 更好吗?
-
这不是很明显吗?一个是强类型,一个是魔术字符串。如果你重构你的模型,你会得到运行时错误。使用
Attach你会得到一个编译错误。每当您在应用程序中anywhere 放置一个魔术字符串时,问问自己为什么,看看是否可以避免。 -
@RPM1984:好的,所以它们的工作方式相同,但一个是强类型的。我明白这一点,但每当有人说不要做某事时,我总是会问。谢谢。
-
现在是“删除”而不是“删除”,顺便说一句。
标签: .net winforms entity-framework-4