当前位置:  开发笔记 > 编程语言 > 正文

LINQ To SQL:使用一个查询删除实体(按ID)

如何解决《LINQToSQL:使用一个查询删除实体(按ID)》经验,为你挑选了2个好方法。

我一直在使用LINQ To SQL一段时间,当涉及从数据库中删除实体时,我总是调用表的.DeleteOnSubmit并传入实体.有时我发现自己写了类似的东西:

db.Users.DeleteOnSubmit(db.Users.Where(c => c.ID == xyz).Select(c => c).Single());

这当然会导致两个查询.一个用于获取符合条件的实体,另一个用于删除它.通常我有我需要删除的记录的ID,我想知道是否有更直接的方法通过ID从表中删除行?



1> Christopher ..:

这是一个解决方案......

public static void DeleteByPK(TPK pk, DataContext dc)
  where TSource : class
{
  Table table = dc.GetTable();
  TableDef tableDef = GetTableDef();

  dc.ExecuteCommand("DELETE FROM [" + tableDef.TableName
    + "] WHERE [" = tableDef.PKFieldName + "] = {0}", pk);
}

这不是我的代码!请参阅解释 - http://msmvps.com/blogs/omar/archive/2008/10/30/linq-to-sql-delete-an-entity-using-primary-key-only.aspx

希望这可以帮助.


在Linq2Sql语句中的行SQL似乎打败了目的
@Bobby:不是.我在行SQL中使用性能和需要时(复杂的SQL).继续SQL生成以进行常见操作.

2> 小智..:

通过附加部分对象并删除它,无需手动工具SQL即可执行此操作:

var myEntity = new MyEntityType { MyEntityId = xxx };
Context.MyEntityTypeTable.Attach(myEntity, false);
Context.MyEntityTypeTable.DeleteOnSubmit(myEntity);
Context.SubmitChanges();

简单.您甚至可以将其作为扩展方法编写,并使用动态对象类型来表示键,并使用反射来确定关键属性,我将留给读者作为有趣的练习.例如实现Context.Delete(new {MyEntityId = xxx});

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有