Как удалить в 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 и не смог сесть и прочитать книгу по этому поводу из-за ограничений по времени. Как только у меня будет больше времени, я, вероятно, прочитаю книгу.
Спасибо
Ответы
Ответ 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);
}
Ответ 2
это простой способ удалить строку из таблицы 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
Ответ 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.