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

链接地址: http://www.djcxy.com/p/26973.html

上一篇: NHibernate Sqldatetime must be between 1/1/1753 and 12/31/9999

下一篇: How to get the Update SQL statement out of NHibernate exception?