NHibernate Sqldatetime必须介于1/1/1753和12/31/9999之间
我在我的MVC项目中使用NHibernate。 我的问题是,虽然即时通讯尝试更新一个对象即时通讯得到以下错误。
SqlDateTime溢出。 必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。
在调试模式下,我看到日期属性不为空。 我将Datetime设置为可映射的空值。 但我仍然遇到sqldatetime错误。
public class EntityBaseMap<T> : ClassMap<T> where T : EntityBase
{
public EntityBaseMap()
{
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.IsDeleted).Not.Nullable();
Map(x => x.CreatedAt).Nullable();
Map(x => x.UpdatedAt).Nullable();
Map(x => x.Random).Formula("NEWID()");
References(x => x.Status).Column("StatusId");
Where("IsDeleted=0");
}
}
保存时日期时间属性不为空。
public int SaveOrUpdatePage(PageDto PageDto)
{
var page = PageDto.Id > 0 ? ById<Page>(PageDto.Id) : new Page();
var status = PageDto.Status.Id > 0 ? LookupById<Status>(PageDto.Status.Id) : null;
var type = PageDto.Type.Id > 0 ? LookupById<PageType>(PageDto.Type.Id) : null;
//var parent = PageDto.Parent.Id > 0 ? ById<Page>(PageDto.Parent.Id) : page.Parent;
page.Description = PageDto.Description;
page.Title = PageDto.Title;
page.SpotText = PageDto.SpotText;
page.Status = status;
page.Text = PageDto.Text;
page.Url = !string.IsNullOrEmpty(PageDto.Url) ? PageDto.Url.ToFileName() : PageDto.Title.ToFileName();
page.Featured = PageDto.Featured;
page.Type = type;
using (var tran = UnitOfWork.CurrentSession.BeginTransaction())
{
UnitOfWork.CurrentSession.SaveOrUpdate(page);
tran.Commit();
}
page.CreateDirectory();
if (PageDto.Id == 0)
{
page.Copy();
page.CopyThumbs();
}
SetResultAsSuccess();
return page.Id;
}
我使用SQLServer 2008和表日期时间列检查与允许null。
这不是NULL
或NULLABLE列的问题。 这是DateTime
ValueType的C#默认值的问题。
default(DateTime) == new DateTime(1,1,1) // 1st January of year 1
所以,因为CreatedAt或UpdatedAt被定义为
public virtual DateTime CreatedAt { get; set; }
public virtual DateTime UpdatedAt { get; set; }
并且从来没有设置为其默认值以外的值......其值为1.1.0001。 而这少于SQL Server下界1.1.1753 ...
换句话说,请确保您将这些值设置为一些有意义的值,例如DateTime.Now
上一篇: NHibernate Sqldatetime must be between 1/1/1753 and 12/31/9999
下一篇: How to get the Update SQL statement out of NHibernate exception?