2

我在数据库中使用 NHibernate 持久化我的对象

App对象定义了一个属性:

public virtual DateTime ReleaseDate { get; set; }

在映射类中:

Map(x => x.ReleaseDate).Not.Nullable();

在 sqlServer 2008 中,它的 dataType 是dateTime且不可为空。

第一次它没有错误地保存到数据库。但是在更新应用信息后我遇到SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

但应用程序发布日期是有效的 dateTime :2/16/2014 2:21:58 AM并且它不为空。

所以我很困惑为什么会引发这个异常?

ist<App> apps = session.QueryOver<Data.Model.App>()
            .List()
            .ToList();
.
.
.
.
for (int i = 0; i < apps.Count(); i++)
        {
            App appWithOldInfo = apps[i];

                using (ITransaction transaction = session.BeginTransaction())
                {
                    try
                    {
                        //updating app info
                        appWithOldInfo = UpdateAppInfo(appWithOldInfo, appWithNewInfo);

                        session.Update(appWithOldInfo);
                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex.Message);
                    }
                }

看截图: 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

4

1 回答 1

2

谢谢你们的有用评论。

问题在于我device从具有属性的数据库中获取对象LastActivityDate

List<Device> devices = session.QueryOver<Data.Model.Device>().List().ToList();

在将带有一些信息的设备对象添加到数据库后,我已将此属性添加到模型中。此属性为空,但我没有将 LastActivityDate 定义为可为空的属性。

所以这个对象在 app 对象的同一个会话中。当我刷新会话时,因为LastActivityDate为空,SqlDateTime 异常上升!

这很简单。但我花了几个小时找到它!

于 2014-03-09T11:34:09.980 回答