C# 使用Fluent NHibernate和MVC 3的SqlDateTime溢出
我正在使用FNH生成ASP.NET MVC3应用程序中使用的库的大约30个类的映射。我正在与MSSQL Express 10合作。我创建了一些代码,允许我用一些数据填充数据库以用于开发目的。但是,当我尝试保存帐户实例时,会收到以下错误消息: System.Data.SqlTypes.SqlTypeException:SqlDateTime溢出。必须在1753年1月1日12:00:00 AM和9999年12月31日11:59:59 PM之间 这是因为Account.CreationDate属性是DateTime。我环顾四周,MSSQL和.NET中的日期时间实际上并不相同。我试图通过FNH映射强制列为“datetime2”,但这似乎没有帮助 这是我的帐户类别(简化): 以及FNH映射:C# 使用Fluent NHibernate和MVC 3的SqlDateTime溢出,c#,asp.net-mvc-3,fluent-nhibernate,sql-server-express,C#,Asp.net Mvc 3,Fluent Nhibernate,Sql Server Express,我正在使用FNH生成ASP.NET MVC3应用程序中使用的库的大约30个类的映射。我正在与MSSQL Express 10合作。我创建了一些代码,允许我用一些数据填充数据库以用于开发目的。但是,当我尝试保存帐户实例时,会收到以下错误消息: System.Data.SqlTypes.SqlTypeException:SqlDateTime溢出。必须在1753年1月1日12:00:00 AM和9999年12月31日11:59:59 PM之间 这是因为Account.CreationDate属性是D
public class AccountMap : ClassMap<Account>
{
public AccountMap()
{
Id(x => x.Id);
Map(x => x.Comment);
Map(x => x.CreationDate);
Map(x => x.Email);
Map(x => x.Password);
Map(x => x.Locale);
}
}
注意,为了调试,我抛出了一些异常。这是一种超现实主义的输出
账户创建日期:2013年2月6日下午5:32:29;异常:System.Data.SqlTypes.SqlTypeException:SqlDateTime溢出。必须在1753年1月1日12:00:00 AM和9999年12月31日11:59:59 PM之间
问题是DateTime属性没有设置为“nullable”,因此,该属性没有设置为“Null”,而是一直设置为01/01/0001,因此触发了超出范围的错误 因此,需要在类(即:
public virtual DateTime?CreationDate{get;set;}
)以及映射(Map(x=>x.CreationDate))中将属性设置为可空。可空;
)
如果失败,即使将属性设置为
null
,也会显示为01/01/0001。属性变为可空后,其值实际上为空,查询成功。是否检查了数据库以查看DateTime字段的DatType是什么。。?我不知道你的格式是否不正确。该字段在MSSQL中是一个“datetime”,但对于ASP.NET,它将是一个SqlDateTime。我期待着NHibernate能够转变自己,问题的关键是如何确保它能够转变。
public class AccountMap : ClassMap<Account>
{
public AccountMap()
{
Id(x => x.Id);
Map(x => x.Comment);
Map(x => x.CreationDate);
Map(x => x.Email);
Map(x => x.Password);
Map(x => x.Locale);
}
}
var compteAdmin = new Account("test", "noone@nowhere.com");
compteAdmin.Locale = "fr-FR";
var toto = compteAdmin.CreationDate;
try
{
session.Save(compteAdmin);
}
catch (Exception ex)
{
throw new ConfigurationException("Account.CreationDate: " + compteAdmin.CreationDate.ToString() + " ; Exception: " + ex);
}