Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq要删除的实体_C#_Linq - Fatal编程技术网

C# Linq要删除的实体

C# Linq要删除的实体,c#,linq,C#,Linq,是否有一种内置的方法可以使用主键通过Linq删除实体 目前,m的解决方法是创建一个名为DeleteTable的存储过程,该存储过程作为表名 然后在C LINQ中,我只做context.DeleteTableID 这是最好的方式吗?还有哪些其他选项?默认方法是查询出实体,然后发出方法。使用execute命令来满足上下文之外的需要,例如: mycontext.ExecuteCommand("DELETE FROM MYTABLE"); 或 HTH您可以使用DbSet.Removeentity版本

是否有一种内置的方法可以使用主键通过Linq删除实体

目前,m的解决方法是创建一个名为DeleteTable的存储过程,该存储过程作为表名

然后在C LINQ中,我只做context.DeleteTableID


这是最好的方式吗?还有哪些其他选项?

默认方法是查询出实体,然后发出方法。

使用execute命令来满足上下文之外的需要,例如:

mycontext.ExecuteCommand("DELETE FROM MYTABLE"); 

HTH

您可以使用DbSet.Removeentity版本4.1、4.2或EntitySet.Removeentity版本1.0、4.0方法:

YourDbContext.Table.Remove(entityObject);

如果不想转到数据库检索对象的所有字段,可以创建该类的新实例,将其附加到新上下文,删除该实例,然后保存更改。这允许EF生成适当的delete命令

using (var context = new MyContext())
{
  var myObject = new MyObject { ID = 3 };
  context.MyObjectSet.Attach(myObject);
  context.MyObjectSet.DeleteObject(myObject);
  context.SaveChanges();
}
注意:当您试图删除一个不存在的对象时,这将引发一个异常。只有在确定对象存在的情况下,这才合适


注2:这假设您已经设置了实体,以便生成的delete命令只引用ID(表示没有时间戳属性)或查询中包含的任何类似字段,然后使用DeleteObject方法搜索要删除的项目并将其删除

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

在try-catch块中使用它可以工作,但是我应该补充一点,只有当EF生成的delete命令引用ID以外的字段时,它才能工作。如果您有一个Timestamp字段,EF将在生成的查询中包含该字段,但是由于它不知道要使用的值,因此查询将出错。这不是要对数据库进行两次访问吗?即,从id=id的某个_表中选择*然后从..的某个_表中删除foo?是的,但是如果您不想对最常用SP的DB执行两次往返,但是您将Insert、Update和Delete命令映射到SP,如果您不映射其中任何命令,那么您将得到一个UPDATEEException异常。同样,我认为您需要先选择实体,然后才能删除它?因此有2次旅行。。我错了?是的,您必须查询实体,或者您可以使用@hvdIs there ExecuteCommand method建议的附加方法来链接实体?还是它只是SQL的链接?我的错。有关EF,请参阅ExecuteStoreQuery。请参阅如何:直接对数据源hthanks执行命令,我从来不知道我可以直接从链接到实体执行此操作。这不需要两次到数据库的访问吗?是的。如果不想映射或调用显式存储过程,则选项有限。@michael不需要trip?
Dim itemToDelete = (From u In db.SOME_TABLE Where u.ID = ID).FirstOrDefault
db.SOME_TABLE.DeleteObject(itemToDelete)
db.SaveChanges()