Подтвердить что ты не робот

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

Я очень новичок в linq для 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);

}

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

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

Однако я не могу понять, почему последняя строка все еще не работает, даже если две другие строки там не там.

Как и я думал, что это сработает, мне понадобится мой объект класса "Таблица", в который я прошел, и просмотрев таблицу для этой информации, содержащейся в нем. Однако это не так.

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

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

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

Спасибо

4b9b3361

Ответ 1

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

Он удалит первичный ключ, но если у вас есть это, просто присоедините, как я делаю ниже, и вызовите 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);
 }

Ответ 3

        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);
        }

Ответ 4

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 - это ваше имя DB Linq, id - имя столбца в таблице Item. Элементы - это имя псевдонима таблицы элементов в linq.