当我有主键时,使用LINQ删除数据库记录的最佳方法是什么?
发布于 2008-10-22 13:51:19
如果将所有列上的update checks设置为never或when changed,则可以简单地附加一个具有主键的实例,并在不加载的情况下删除行。
public void DeleteCustomer(int CustomerID)
{
NorthwindContext c = new NorthwindContext c;
Customer target = new Customer(){CustomerID = CustomerID};
c.Customers.Attach(target);
c.Customers.DeleteOnSubmit(target);
c.SubmitChanges();
}发布于 2008-10-22 03:36:16
这种方法是可以接受的,也是典型的。
这有点浪费,因为您请求的是整个记录。考虑到DeleteOnSubmit方法签名,这是无法避免的。
为什么LINQ to SQL是这样工作的?如果您考虑没有主键或使用组合键的表,答案是显而易见的。LINQ to SQL需要完整的记录,以防万一,它需要将每个对象属性与表字段进行匹配。
但是,对于性能方面的所有问题,您是否完全确定这是一个性能问题?你的分析证据在哪里?
我还没有尝试过这一点,但也许有一种方法可以用DataContext.ExecuteCommand实现相同的功能。
发布于 2008-10-22 03:39:01
我最终做了一个select,但改进了我的语法,我认为这是我真正关心的:
旧的:
var products = from p in db.Products select p;
db.Products.DeleteOnSubmit(products.Take(1).Single()); <--seemed nasty
db.SubmitChanges();新的:
Service service = db.Services.Where(s => s.id == serviceID).FirstOrDefault(); <--nicer
db.Services.DeleteOnSubmit(service);
db.SubmitChanges();https://stackoverflow.com/questions/224359
复制相似问题