NHibernate Свободно Исключение - Объект не может быть приведен из DBNull к другим типам - PullRequest
0 голосов
/ 06 октября 2019

Я не могу передать всю информацию, необходимую для решения этой проблемы.

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

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

Спасибо всем, кто предоставил любую информацию.


Отображены только несколько столбцов, и Id установлены как "PK". Я понятия не имею, что происходит.

  • Я пытаюсь удалить Nullabe из столбца ID, та же проблема
  • Изменить весь проект для работы с Decimal неDecimal?, та же проблема
  • Ничего об этом не нашел в google

Это похоже на то, как кто-то в NHibernate забыл проверить IsDbNull() перед отражением.

CLASS

public class BaseMap<T> : ClassMap<T> where T : IEntity
{
    public BaseMap()
    {
        Id(x => x.Id, "ID").GeneratedBy.TriggerIdentity();
    }
}

public class UsuarioMap : BaseMap<Usuario>
{
    public UsuarioMap()
    {
        //Indica qual a tabela deve ser utilizada.
        Table("FUNCIONARIO");
        Map(x => x.CodigoReduzido, "FUN_CODIGO");
        Map(x => x.CodPerfilBiomeek, "PER_CODIGO");
        Map(x => x.Local, "LOC_CODIGO");
        Map(x => x.Nome, "FUN_NOME");
        Map(x => x.DataInclusao, "FUN_DT_INC");
        Map(x => x.UsuarioInclusao, "FUN_FUN_INC");
    }
}

ТАБЛИЦА

enter image description here

Исключение

System.InvalidCastException: Object cannot be cast from DBNull to other types.
   at System.DBNull.System.IConvertible.ToDecimal(IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at NHibernate.Id.Insert.OutputParamReturningDelegate.ExecuteAndExtract(IDbCommand insert, ISessionImplementor session)
   at NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder)
   at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj, ISessionImplementor session)
   at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Object obj, ISessionImplementor session)
   at NHibernate.Action.EntityIdentityInsertAction.Execute()
   at NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
   at NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
   at NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
   at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
   at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
   at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)
   at NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event)
   at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
   at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)
   at NHibernate.Impl.SessionImpl.Save(Object obj)

1 Ответ

0 голосов
/ 17 октября 2019

Отключенный триггер является причиной проблемы

Id(x => x.Id, "ID").GeneratedBy.TriggerIdentity();

После INSERT отключенный триггер не генерирует ID и столбец «ID» возвращает с DbNull стоимость.

enter image description here

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