Intereting Posts
Как можно интерпретировать ошибку «Клиент нашел тип содержимого ответа« text / html ».. Проблема в DataGridView: datagridview кажется только для пользователей (WinForms) Связь шаблона MVVM между ViewModel и Model Альтернатива Thread.Sleep в Windows Form, кроме Timer Должны ли объявления переменных всегда размещаться вне цикла? доступ к элементам XSD-файла в c # Есть ли автоматический код форматирования для C #? Проверьте, реализует ли тип общий интерфейс, не рассматривая общие аргументы типа Получить полный путь к текущему узлу Отключение события onSelectedIndex, измененного в раскрывающемся списке WPF, при навигации по клавишам вызова ASP.NET Core 1.1 работает нормально локально, но при публикации в Azure говорится: «Ошибка при запуске приложения». Преобразование String в int в C # Найти соседние элементы в 2D-матрице Как я могу получить дескриптор windows, указав имя процесса, которое запущено? Не удалось найти FromStream в classе Image

NHibernate.AssertionFailure: идентификатор null

Прежде чем я отправлю компьютер на следующую неделю …

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

Я получаю эту ошибку при сохранении объекта: NHibernate.AssertionFailure: идентификатор null

Это мой файл сопоставления:

public class OrderMap : BaseMap { public SalesOrderMap() { Id(x => x.Id).Column("OrderId"); } } 

Это объект:

 public class Order { public virtual int Id { get; protected set; } } 

Это мой тестовый код:

 Order order = new Order(); ISession session = SessionFactory.GetCurrentSession(); session.SaveOrUpdate(order); <----EXCEPTION ON THIS LINE session.Flush(); 

А потом взрыва … он ломается

 [AssertionFailure: null identifier] NHibernate.Engine.EntityKey..ctor(Object identifier, String rootEntityName, String entityName, IType identifierType, Boolean batchLoadable, ISessionFactoryImplementor factory, EntityMode entityMode) +135 NHibernate.Engine.EntityKey..ctor(Object id, IEntityPersister persister, EntityMode entityMode) +70 NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) +545 NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) +322 NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) +130 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) +27 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event) +63 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) +89 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) +188 NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent event) +259 NHibernate.Impl.SessionImpl.SaveOrUpdate(Object obj) +256 

если кому-то это интересно, вот как строится фабрика сеансов:

 ControllerSource.SessionFactory = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2008.ConnectionString(DataConfig.ConnectionString)) .Mappings(x => x.FluentMappings.Add(typeof (OrderMap))) .ExposeConfiguration(c =>{ c.SetProperty("generate_statistics", "false"); c.SetProperty("current_session_context_class", contextClass); c.SetProperty("cache.use_second_level_cache", "false"); c.SetProperty("cache.use_query_cache", "false"); c.SetProperty("connection.release_mode", "on_close"); }) .BuildSessionFactory(); 

Генератор по умолчанию – Native, который, в свою очередь, будет использовать Identity для SQL Server 2008. Моя ставка заключается в том, что у вас нет идентификатора, указанного в столбце в определении таблицы.

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

Когда NHibernate вставляет объект, он запрашивает базу данных для автоматически сгенерированного первичного ключа нового объекта.

 INSERT INTO [Order] (MyProperty) VALUES (@p0); select SCOPE_IDENTITY() 

Обратите внимание на вызов SCOPE_IDENTITY () .

Если SCOPE_IDENTITY возвращает NULL, вы получите исключение NHibernate.AssertionFailure: null.

Например, триггер «INSTEAD OF INSERT» заставит SCOPE_IDENTITY вернуть значение null и вызвать утверждение NHibernate.

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

Кроме того, вы можете обернуть свою вставку в транзакцию; затем отключите триггер перед вставкой, выполните фактическое сохранение / вставку объекта, затем снова включите триггер и совершите транзакцию.

Вы должны либо назначить свою правоту id при попытке создать новый, либо указать, как он создается в файле сопоставления. Измените свое сопоставление на:

 Id(x => x.Id).Column("OrderId").GeneratedBy.Identity();