Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用NHibernate的SqlDateTime溢出_C#_Sql Server 2008_Nhibernate_Fluent Nhibernate_Sqldatetime - Fatal编程技术网

C# 使用NHibernate的SqlDateTime溢出

C# 使用NHibernate的SqlDateTime溢出,c#,sql-server-2008,nhibernate,fluent-nhibernate,sqldatetime,C#,Sql Server 2008,Nhibernate,Fluent Nhibernate,Sqldatetime,我在数据库中使用NHibernate持久化我的对象 App对象定义了一个属性: public virtual DateTime ReleaseDate { get; set; } 在mappingClass中: Map(x => x.ReleaseDate).Not.Nullable(); 在SQLServer2008中,其数据类型为dateTime,不可为空 这是它第一次毫无错误地保存到数据库中。但是在更新应用程序信息之后,我遇到了SqlDateTime溢出。必须在1753年1月1日

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

App
对象定义了一个属性:

public virtual DateTime ReleaseDate { get; set; }
在mappingClass中:

Map(x => x.ReleaseDate).Not.Nullable();
在SQLServer2008中,其数据类型为
dateTime
,不可为空

这是它第一次毫无错误地保存到数据库中。但是在更新应用程序信息之后,我遇到了
SqlDateTime溢出。必须在1753年1月1日12:00:00 AM和9999年12月31日11:59:59 PM之间。

但应用程序发布日期是一个有效的日期时间:
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);
                    }
                }
ist apps=session.QueryOver()
.List()
.ToList();
.
.
.
.
对于(int i=0;i
请参见屏幕截图:
谢谢大家的宝贵意见

问题是我正在从数据库中提取
device
对象,该数据库具有属性
LastActivityDate

List devices=session.QueryOver().List().ToList();

我在向数据库中添加了一个带有一些信息的设备对象之后,将这个属性添加到了模型中。 此属性为null,但我尚未将LastActivityDate定义为可为null的属性

所以这个对象和app对象在同一个会话中。当我刷新会话时,因为
LastActivityDate
为空,SqlDateTime异常出现了


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

你确定这是你数据库表中唯一的日期和时间吗?也许还有另一个你忘记了的日期和时间,默认为1/1/0001?是的,我确定。请看更新的帖子。还有另一个类型为
timeStamp
的字段用于跟踪实体的版本更改。值是多少关于这一点?这里的答案可能是在另一个实例中,默认的
DateTime
-由会话加载。我怀疑的可能是
appWithNewInfo
。如果这个(其他实例)只是在
会话期间从DB加载的,即保存在会话中。Flush()
-即使此实例也会被持久化。因此,问题是另一个对象正在添加到NHibernate会话。在刷新(或在我的情况下是提交)时,如果会话中的所有对象都没有所有正确的数据,NHibernate会自动抛出。要防止出现这种情况,请添加一个.readonly()以这种方式对查询或查询进行扩展,NHibernate不会跟踪它。在Hashems示例中,他可以执行一个
List devices=session.QueryOver().Readonly().List().ToList()