是否有使用主键从Linq to Entites删除的内置方法。
目前解决方法是创建一个名为DeleteTable的存储过程(表是表名)
然后在C#LINQ To Entities中我只做context.DeleteTable(ID)
这是最好的方法吗?还有哪些其他选择?
答案 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