powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Удаление из подчиненной таблицы вызывает ошибку сохранения???
9 сообщений из 9, страница 1 из 1
Удаление из подчиненной таблицы вызывает ошибку сохранения???
    #36090362
Дмитрий16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано:
Две таблицы: Order - Details
На форме (vb.net) два DataGridView
Данные загружаются командой:

Код: plaintext
1.
OrdersBindingSource.DataSource = From o In school.OrderSet.Include("tblDetails") Select o
    DetailsBindingSource.AllowNew = True

Добавление новых строк, редактирование и удаление из основной таблицы проходит на ура. (Т.е. каскадное удаление работает) Редактирование и добавление в details тоже работает.
Но удаление из details при последующем сохранении генерирует ошибку:

Код: plaintext
1.
2.
В набор AssociationSet "FK_tblDetails_tblOrder" добавляется связь
или связь удаляется из этого набора. При наличии ограничений на количество
 элементов необходимо также добавить или удалить соответствующий "Details".

Вопрос: как лечить и куда смотреть?
...
Рейтинг: 0 / 0
Удаление из подчиненной таблицы вызывает ошибку сохранения???
    #36091803
_Thor_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы с LINQ to SQL работаете?
...
Рейтинг: 0 / 0
Удаление из подчиненной таблицы вызывает ошибку сохранения???
    #36095378
Дмитрий16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Entity Framework
...
Рейтинг: 0 / 0
Удаление из подчиненной таблицы вызывает ошибку сохранения???
    #36097790
Дмитрий16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам спросил - сам и отвечу. Вдруг кому пригодится:
1. В разделе: <!-- CSDL content --> надо на связь установить каскадное удаление. Примерно так:
Код: plaintext
1.
2.
3.
4.
<Association Name="FK_tblDetails_tblOrder">
          <End Type="SchoolDataModel.Order" Role="Order" Multiplicity="1" >
            <OnDelete Action="Cascade"></OnDelete>
          </End>
          <End Type="SchoolDataModel.Details" Role="Details" Multiplicity="*" /></Association>
Причем в разделе <!-- SSDL content --> при генерации модели по базе свойство Cascade уже будет установлено!
2. В DataGridView на обработчик события DeletingRow вписать чтото вроде:
Код: plaintext
1.
2.
3.
Private Sub DetailsDataGridView_UserDeletingRow(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowCancelEventArgs) Handles DetailsDataGridView.UserDeletingRow
    school.DeleteObject(e.Row.DataBoundItem)
    e.Cancel = True
  End Sub
...
Рейтинг: 0 / 0
Удаление из подчиненной таблицы вызывает ошибку сохранения???
    #36103116
_Thor_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий16,

Думаю более правильнее "создавать каскадное удаление" в базе данных, а не в "Разделе...", т.к. я сомниваюсь что ЕФ за всеми связанными сущностями уследит.
...
Рейтинг: 0 / 0
Удаление из подчиненной таблицы вызывает ошибку сохранения???
    #36110792
Дмитрий16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Thor_,

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

P.S. кстати. я почему то думал, что если указать в моделе каскадное удаление, то вместо явного удаления всех дочерних записей EF поймет, что достаточно удалить только одну родительску запись. Так вот так не получается...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim o As New Order
    o.NUMBER =  1 
    o.ORDERTEXT = "Один"
    school.AddObject("OrderSet", o)

    Dim d As New Details
    d.DETAILSTEXT = "11"

    Dim d1 As New Details
    d1.DETAILSTEXT = "12"

    o.tblDetails.Add(d)
    o.tblDetails.Add(d1)
    school.SaveChanges()

    school.DeleteObject(o)
    school.SaveChanges()

После команды DeleteObject(o) при записи изменений в базу проходит сперва два удаления для дочерних записей, затем одно для родительской.
Вывод. EF как-то вяло использует информацию о наличии в базе каскадных удалений.
...
Рейтинг: 0 / 0
Удаление из подчиненной таблицы вызывает ошибку сохранения???
    #36112429
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А он её вообще не использует.
...
Рейтинг: 0 / 0
Удаление из подчиненной таблицы вызывает ошибку сохранения???
    #36113874
_Thor_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий16,

Мда, странное поведение ЕФ в приведённом вами примере.
Интересно, чем бы дядя Бил аргументировал такой факт?
...
Рейтинг: 0 / 0
Удаление из подчиненной таблицы вызывает ошибку сохранения???
    #36114210
Фотография XLinq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий16,

по-моему ты просто не прорефрешил контекст.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Удаление из подчиненной таблицы вызывает ошибку сохранения???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]