У меня есть такое отображение ChargeOperations (левая таблица) и Распределения (правая таблица):
В сопоставлении кода ChargeOperations выглядит так:
HasMany(x => x.Distributions).Table("ShadowDistributions").KeyColumn("SourceId").Cascade.All().Inverse();
ShadowDistributions - это правильная таблица. x.Distributions - это просто список Распределений (правая таблица). X - это ChargeOperation (левая таблица)
Отображение распределений (правая таблица)
References(x => x.Source).Nullable().Column("SourceId").Not.LazyLoad();
References(x => x.Dest).Nullable().Column("Dest").LazyLoad().Fetch.Join().Cascade.All();
Итак, я хочу удалить только одну строку из Распределений (правая таблица).
И приложения генерируют различные исключения сопоставления, такие как «Транзакция не может быть зафиксирована из-за сбоя ресурса: удаленный объект будет повторно сохранен каскадом (удаляет удаленный объект из ассоциаций) [ChargeOperation # 58]» »или« Неожиданный счетчик строк: 0; ожидается: 1 "и т. д.
Я использую каскад для создания сущностей, и он прекрасно работает, но для удаления мне пришлось
очистите все ссылки в правильной таблице, и после этого сохраните все типы объектов отдельно. Если нет, я получу ошибки.
Но я бы хотел использовать каскадное сохранение. Как я могу это понять?
Возможные варианты после сохранения:
- удалил только одну запись из правой таблицы. все записи слева
таблица существует
- удалил только две записи из правой таблицы. все
записи в левой таблице также удаляются