如何在linq中删除到sql?

问题描述 投票:13回答:5

我对linq to sql很陌生,我不确定如何实际删除记录。

所以我一直在看本教程

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

所以他们有更新

NorthwindDataContext db = new NorthwindDataContext();

Product product = db.Products.Single(p => p.ProductName == "Toy 1");

product.UnitPrice == 99;
product.UnitsInStock = 5;

db.SubmitChanges();

对于删除,他们有

NorthwindDataContext db = new NorthwindDataContext();

var toyProducts = from p in db.Producsts
              where p.ProductName.Contains("Toy")
                  select p;

db.Products.RemoveAll(toyProducts);

db.SubmitChanges();

所以我必须每次查询以获取记录才能删除该记录吗?就像我可以看到用update进行操作一样,因为您需要给它提供一条记录,该记录要先更新然后进行更改,以便我理解查询部分,但不能使用delete。

就像您不能仅发送您要删除的内容,然后删除它吗?为什么您必须首先获取它然后告诉它删除?

是不是数据库中有2个匹配项?

[此外,我还有要努力工作的外键关系。所以我有这个

public ViewResult(string param1, string param2)
{
   Table A = new Table A
   A.Field1 = param1;
   A.Field2 = param2;

   Delete(A);
}

private void Delete(Table A)
{
   DbContext.A.DeleteAllOnsubmit(A.TableB);
   DbContext.A.DeleteAllOnSubmit(A.TableC);
   DbContext.A.DeleteOnSubmit(A);

}

因此失败,它显示此消息“无法删除尚未连接的实体。”

所以我可以看到为什么前两行在delete方法中会失败,因为我创建了一个新对象,而在包含有关TableB和TableC的任何信息的对象中它们什么也没有。

但是,即使另外两行不在那,我也看不到为什么最后一行仍然失败。

就像我认为它将如何工作一样,它将使用我传入的Table A类对象,并在表中查找其中包含的信息。似乎并非如此。

因此,我首先必须将信息取出,然后进行查询以获取信息,然后再将其删除,例如在示例中?

此外,removeAll()和说DeleteAllOnSubmit()之间有什么区别?

就像我说过的,我对sql的linq是陌生的,由于时间限制,我无法坐下来阅读有关它的书。一旦我有更多的时间,我可能会读一本书。

谢谢

asp.net asp.net-mvc linq-to-sql
5个回答
13
投票

您的一个问题中有几个问题,但是如果您已经有了主键,那么我将以最简单的方式开始,即附加。如果您没有主键,那么我总是会先执行提取操作,然后再执行删除操作,但是,每当执行提取操作时,我都会存储主键以进行更新和删除。

它将删除主键,但是如果有的话,请像下面一样附加并调用delete。我没有绕过DLINQ所需的对象,因为我想可以根据需要对其进行更改,因此我传递了一个不同的User对象,只是从业务类中提取PK并将其放入DAO类中。 >

var db = new MeatRequestDataContext();            
if (input.UserID > 0)
{
     entity = new User()
     {
         UserID = input.UserID
     };
     db.Users.Attach(entity);
     db.Users.DeleteOnSubmit(entity);
 }

5
投票
Inserted_LINQDataContext db = new Inserted_LINQDataContext();
                Item itm = new Item();
                int ID = Convert.ToInt32(TextBox1.Text);
                var DeleteID = from d in db.Items
                               where d.id == ID
                               select d;
                db.Items.DeleteAllOnSubmit(DeleteID);
                db.SubmitChanges();
                Label2.Text = "Record deleted Successfully.";
                TextBox1.Text = "";

4
投票

这是通过linq查询从表中删除行的简单方法。可能有帮助。


2
投票
        SupportDataDataContext Retrive = new SupportDataDataContext();
        //  SupportDataDataContext delete = new SupportDataDataContext();

        Topic res = Retrive.GetTable<Topic>().Single(t => t.ID == topicID);


        if (res != null)
        {
            Retrive.Topics.DeleteOnSubmit(res);
            Retrive.SubmitChanges(ConflictMode.ContinueOnConflict);
        }

0
投票

我知道这个问题很旧,但这可能对某人有用:

© www.soinside.com 2019 - 2024. All rights reserved.