linq-to-sql "Невозможно удалить объект, который не был прикреплен" - PullRequest
11 голосов
/ 23 декабря 2011

Я получаю сообщение об ошибке Cannot remove an entity that has not been attached. при попытке удалить запись.Я погуглил, и хотя есть много мест, где можно найти решение, чтобы решить эту проблему, предлагаемое исправление не дает мне дальнейших результатов:

using (MyDataContext TheDC = new MyDataContext())
{
  TheDC.MyTable.Attach(ARecord); //added this line but doesn't fix it.
  TheDC.MyTable.DeleteOnSubmit(ARecord);
  TheDC.SubmitChanges();

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

Спасибо.

Ответы [ 2 ]

14 голосов
/ 23 декабря 2011

Пожалуйста, обратитесь к этой SO Post: Как удалить в linq to sql?

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

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

Для меня исправление - это сначала поиск объекта базы данных.

var db = new MeatRequestDataContext();
if (input.UserID > 0)
{
    var existing = db.Users
        .Single(user => user.UserID == input.UserID);

    db.Users.DeleteOnSubmit(existing);
}

По-моему, я мог удалить только то, что уже было, поэтому мне нужно было получить элементы в базечто я хотел удалить первым.Это также работает с коллекциями и DeleteAllOnSubmit ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...