Как удалить в linq to sql? - PullRequest
       33

Как удалить в linq to sql?

12 голосов
/ 24 августа 2009

Я очень плохо знаком с 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();

Так должен ли я каждый раз запрашивать, чтобы получить запись, чтобы удалить эту запись? Как будто я могу видеть, как это происходит с обновлением, поскольку вам нужно дать ему запись, которую нужно сначала обновить, а затем внести изменения, чтобы я понимал запрашивающую часть, но не с удалением.

Например, вы не можете просто отправить то, что хотите удалить, и оно отправляется и удаляет это? почему вы должны сначала получить его, а затем сказать, чтобы его удалили?

Разве это не 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);

}

Таким образом, это терпит неудачу, появляется сообщение «Невозможно удалить объект, который не был присоединен».

Итак, я могу понять, почему первые 2 строки потерпели неудачу в методе удаления, так как я создал новый объект, а их нет в объекте, который имеет какую-либо информацию о TableB и TableC.

Я, однако, не понимаю, почему последняя строка по-прежнему не работает, даже если 2 других строки там нет.

То, как я думал, что это сработает, возьмет мой объект класса Table A, который я передал, и просмотрит таблицу на предмет содержащейся в нем информации. Похоже, это не так.

Так что мне сначала нужно извлечь информацию, а затем выполнить запрос, чтобы получить ее, а затем удалить, как в примере?

Также, в чем разница между removeAll () и скажем DeleteAllOnSubmit ().

Как я уже сказал, я новичок в linq to sql и не смог сесть и почитать книгу об этом из-за нехватки времени. Когда у меня будет больше времени, я, наверное, прочитаю книгу.

Спасибо

Ответы [ 4 ]

13 голосов
/ 24 августа 2009

У вас есть несколько вопросов в вашем одном вопросе, но я начну с самого простого, о присоединении, если у вас уже есть первичный ключ. Если у вас нет первичного ключа, тогда я всегда делал выборку, а затем удаление, но всякий раз, когда я делаю выборку, я склонен хранить первичный ключ для обновлений и удалений.

Он удалит первичный ключ, но если он у вас есть, просто присоедините, как я делаю ниже, и вызовите 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 голосов
/ 23 декабря 2014
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 = "";

где Item - имя таблицы, Linserted_LINQDataContext - имя вашей базы данных Linq, id - имя столбца в таблице Item. Items - это псевдоним таблицы Item в linq.

4 голосов
/ 25 сентября 2013

это простой способ удалить строку из таблицы с помощью linq query.may, может быть, это поможет.

        var summary_delete = database.summeries.Find(id);

        var delete = database.summeries.Remove(summary_delete);

        database.SaveChanges();

ссылка: http://mvc4asp.blogspot.in/2013/09/how-to-delete-table-row-in-sql-database.html

2 голосов
/ 08 мая 2012
        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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...