2010-12-09 5 views
5

나는이 질문에 비슷한 문제에 봉착 :자 NHibernate 2.1.2 던지는 날짜 시간 널 오버 플로우 예외

NHibernate 2.* mapping files: how to define nullable DateTime type (DateTime?)?

NHibernate won't persist DateTime SqlDateTime overflow

내가 NHibernate에 2.1.2 FluentNhibernate 1.0.0.636를 사용하고 있습니다를 . NHibernate 2.x에서는 null 가능 DateTime? 이슈가 수정되어야하고 매핑에 특별한 것을 할 필요가 없습니다. 따라서 모든 내 DateTime 속성은 다음과 같이 간단하게 설정됩니다.

public virtual DateTime? CreatedOn { get; set; } 

내 데이터베이스 (SQL2008)에는 모든 DateTime 속성이 null로 설정됩니다.

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 

NHibernate에이 날짜 시간은 포함되지 않습니다 아무것도 잘 작동 : 나는 SQL2008 방언을 사용하는 내 NHibernate에 config 파일 설정을 가지고있다. 참고로, 여기에 내가 받고있어 정확한 오류는 다음과 같습니다

> at 
> NHibernate.AdoNet.SqlClientSqlCommandSet.ExecuteNonQuery()</StackTrace><ExceptionString>System.Data.SqlTypes.SqlTypeException: 
> SqlDateTime overflow. Must be between 
> 1/1/1753 12:00:00 AM and 12/31/9999 
> 11:59:59 PM. 

내가 SQL 프로파일 러를 실행하면, 내가 NHibernate에이 매우 긴 문장이었다 (실행하려고 마지막 명령을 볼 수 있습니다, 그래서 그것을 잘립니다했습니다) :

exec sp_executesql N'UPDATE Projects SET Job = @p0, CreatedOn = @p1, .. WHERE (Where Clause), @p0=219221, @p1=NULL 

이 명령문을 쿼리로 실행하면 SQL은 문제가 없어도 전혀 불평하지 않습니다.

무슨 일 이니?

답변

0

이유는 모르겠지만,이 작품은 here입니다. 링크의 예와 달리 광산은 DateTime?입니다. 나는 왜 작동하는지 모르지만 그렇습니다.

+0

DateTime? dateTime이 null 일 수 있기 때문에 작동합니다. 날짜 - 시간이 nullable (DateTime 만)이 아닌 경우 1/1/0001 인 min-value로 인스턴스화됩니다. –

1

DateTime 속성은 null 대신 DateTime.MinValue (1/1/0001) 또는 DateTime 열의 유효한 범위 값으로 설정됩니다.

0

나는이 동일한 문제가있었습니다. 처음에는 null을 사용할 수있는 날짜에서 null 가능한 datetime으로 SQL 형식을 전환하여 문제를 해결했다고 생각했습니다. 그러나 그것은 신기루였습니다. 근본적인 원인은 새로 추가 된 다른 테이블에 계단식 업데이트입니다.

모든 사람 (특히 MS)이 더 많은 설명 오류를 던진 경우 신속하게 해결되었을 것입니다. Cest la vie.