It is impossible for me to pass on all the information necessary to solve this problem.
I need tips, solutions to similar problems ... that kind of thing.
When I solve it, I mark the answer that helped me solve the problem and post how it was done.
Thanks to all who contribute any information.
Only a few columns are mapped and Id
are set as "PK".
I don't have a clue about what happeing.
ID
column, same problemDecimal
not Decimal?
, same problemIt's like someone on NHibernate forget to check IsDbNull()
before reflection.
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");
}
}
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)
A disabled trigger is the cause of the problem
Id(x => x.Id, "ID").GeneratedBy.TriggerIdentity();
After the INSERT the disabled trigger do not generate ID and "ID" column return with DbNull value.