ошибка {{не удалось выполнить пакетную команду. [SQL: SQL недоступен] "} из NHibernate - PullRequest
3 голосов
/ 28 февраля 2012

Я посмотрел другие похожие посты, но не смог найти решения.
Иногда на sesstion.Flush () я получаю следующую ошибку:

{"не удалось выполнить пакетную команду. [SQL: SQL недоступен]"}

и внутреннее исключение:

{"Оператор UPDATE конфликтовал с ограничением FOREIGN KEY FK1377052553ABF955. Конфликт произошел в базе данных ProcessDebug, таблица dbo.Adjustment, столбец« AdjustmentId ». Оператор был прерван."}

фрагмент отображения класса Process:

   References(p => p.CurrentAdjustment)
        ;

    References(p => p.DefaultAdjustment)
        ;

    HasMany(p => p.Adjustments)
        .Cascade.AllDeleteOrphan()
        .Inverse()
        ;

Все вышеперечисленные свойства относятся к типу настройки. Пока я получаю эту ошибку время от времени, я не мог отследить ее. Для сущности это может произойти сейчас, но не в следующий раз в том же фрагменте кода ...

Есть идеи, что может вызвать проблему?
Я использую NH 3.2 и FluentNhibernate
Заранее спасибо

Ответы [ 6 ]

2 голосов
/ 01 апреля 2015

В моей ситуации это был "NULL" в одном из столбцов данных. Проверьте данные вашей базы данных.

FOREIGN KEY -> это означает, что у вас, вероятно, есть столбец null i, то есть для «соединения».

p.s. Возьмите SQL Profiler и проверьте SQL, сгенерированный nHibernate.

1 голос
/ 28 февраля 2012

Вам нужно посмотреть на sql, который на самом деле пытается выполнить.

Похоже, что вы пытаетесь обновить первичный ключ ("AdjustmentId") до того, что не существует.Отсюда нарушение внешнего ключа.

0 голосов
/ 29 июня 2019

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

0 голосов
/ 13 июня 2017

Чтобы найти фактическую причину, вам нужно увидеть SQL, который генерируется nHibernate. Вы можете использовать журнал nHibernate или профилировщик nHibernate, чтобы получить эти SQL. Немногие из распространенных проблем, связанных с вышеупомянутым сообщением об ошибке, включают:

  • Строка или двоичные данные будут усечены. Примером этой проблемы является всякий раз, когда вы предоставляете строковое значение, которое больше, чем определенный размер поля varchar / nvarchar в базе данных.
  • Ожидаемое значение первичного или внешнего ключа равно нулю
0 голосов
/ 07 апреля 2017

В моем случае я добавляю данные со столбцом, тип которого DateTime, Я вставляю 2100/2/2 получаю эту ошибку, но при вставке более разумного времени 2001/2/2 получаю успех,

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

0 голосов
/ 28 февраля 2012

Похоже, ваша база данных, а не ваши коды nHibernate, проверьте SQL в файле журнала и попытайтесь выполнить его

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