как удалить запись, чей рк является чужим фк в linq - PullRequest
0 голосов
/ 31 августа 2011

Моя база данных имеет поля типа

CId(PK- Auto Generated)
   IsSub(bit)
   PId(FK)

В этой структуре Cid генерируется автоматически, и, если новая запись является дочерней записью cid, Issub = true, а Pid = id Cid.

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

Как можно сделать удаление этой записи, имеющей вложенные записи. CID IsSub PID

  1         FALSE   null
  2         FALSE   null
  3         TRUE    2
  4         TRUE    2

Как я могу удалить CID = 2?

Мой код v

ar del = context.DataTable.Where(c => c.CId == userData.CId).Single();
                context.DataTable.DeleteObject(del);
                context.SaveChanges();

Это удалит одну запись, в которой нет ссылки. что я могу сделать, чтобы удалить оба 1) удалить cid = 1

или удалить cid = 2, удалит также cid = 3 и 4.

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Когда вы создаете fk, вы можете указать, должен ли он автоматически удалять дочернюю запись при удалении родителя или вызывать исключение. Ваш внешний ключ, очевидно, вызывает исключение.

Существует три возможных решения:

  1. Измените внешний ключ, чтобы он удалял дочернюю запись. (очевидно, эта функция отсутствует в вашей базе данных)

  2. Вручную удалите дочерние записи перед удалением родителя.

  3. Установите для родительского элемента дочерней записи значение null (или для родительского элемента родительского элемента) перед удалением родительского элемента.

0 голосов
/ 31 августа 2011

Linq2SQL не имеет встроенной возможности каскадного удаления - вам нужно будет выполнить работу самостоятельно.Некоторые идеи здесь и здесь .

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