Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Problemas do Fluent NHibernate com valores da coluna DATE do SQL Server 2008


Desculpe, acabei de perceber que deveria postar isso como uma resposta à pergunta em vez de apenas comentar... Por favor, não ria do "cara novo!"

Através de mais discussões e testes, parece que este problema está relacionado ao uso do ADO.NET e NHibernate das colunas DbType.Date para MS SQL 2008 do tipo de dados DATE. Se o código estivesse usando SqlDbType.Date em vez de DbType.Date, nenhum desses problemas ocorreria e tudo funcionaria conforme especificado.

Embora o uso de DbType.Date possa parecer mais "portátil" para outros tipos de banco de dados, ele apresenta esse problema, pois o ADO.NET DbType.Date tem a restrição de um valor mínimo de 1/1/1753.

Uma solução para esse problema é informar ao NHibernate que o tipo da coluna é DATETIME2, que também oferece suporte a valores de data anteriores a 1/1/1753. Se o mapeamento do NHibernate for:
<property name="TestDate" type="datetime2">
  <column name="TestDate" sql-type="date" />
</property>

O código funciona conforme o esperado, sem exceções.

É uma pena que o NHibernate não reconheça que está usando o dialeto MsSql2008 e use os SqlDbTypes em vez dos DbTypes, mas essa solução parece funcionar por enquanto.

Para obter mais informações sobre os aspectos do ADO.NET, consulte ADO.NET Insert Min Value into SQL Server 2008 Date column crashes . Obrigado a @Graham Bunce por sua ajuda com isso.

Espero que esta informação ajude quem se deparar com este problema no futuro.