Linq to Entities删除

时间:2011-12-27 22:08:49

标签: c# linq

是否有使用主键从Linq to Entites删除的内置方法。

目前解决方法是创建一个名为DeleteTable的存储过程(表是表名)

然后在C#LINQ To Entities中我只做context.DeleteTable(ID)

这是最好的方法吗?还有哪些其他选择?

5 个答案:

答案 0 :(得分:12)

如果您不想转到数据库以检索所有对象的字段,则可以创建该类的新实例,将其附加到新上下文,删除该实例并保存更改。这使EF可以生成相应的删除命令。

using (var context = new MyContext())
{
  var myObject = new MyObject { ID = 3 };
  context.MyObjectSet.Attach(myObject);
  context.MyObjectSet.DeleteObject(myObject);
  context.SaveChanges();
}

注意:这会抛出一个例外,即你试图删除一个不存在的对象。只有在您确定对象存在时才适用。

注意2:这假设您已设置实体,以便生成的删除命令不引用除ID之外的其他字段(意味着没有时间戳属性,或者查询中包含的任何类似内容)

答案 1 :(得分:5)

默认方式是查询实体,然后发出.DeleteObject(...)方法。

答案 2 :(得分:2)

您可以使用DbSet<T>.Remove(entity)(版本4.1,4.2)或EntitySet<T>.Remove(entity)(版本1.0,4.0)方法:

YourDbContext.Table.Remove(entityObject);

答案 3 :(得分:2)

我用来搜索要删除的项目,然后使用DeleteObject方法删除它们(它们)。

Dim itemToDelete = (From u In db.SOME_TABLE Where u.ID = ID).FirstOrDefault
db.SOME_TABLE.DeleteObject(itemToDelete)
db.SaveChanges()

在try catch块中使用它

答案 4 :(得分:1)

使用execute命令满足您的需求,例如:

mycontext.ExecuteCommand("DELETE FROM MYTABLE"); 

mycontext.ExecuteCommand("TRUNCATE TABLE MYTABLE");

HTH