Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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# 使用Fluent NHibernate和MVC 3的SqlDateTime溢出_C#_Asp.net Mvc 3_Fluent Nhibernate_Sql Server Express - Fatal编程技术网

C# 使用Fluent NHibernate和MVC 3的SqlDateTime溢出

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

我正在使用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映射:

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);
        }