2

我正在使用 FNH 生成 ASP.NET MVC3 应用程序中使用的库的大约 30 个类的映射。我正在使用 MSSQL Express 10。我创建了一些代码,允许我用一些数据填充数据库以用于开发目的。但是,当我尝试保存 Account 实例时,我收到以下错误消息:

System.Data.SqlTypes.SqlTypeException:SqlDateTime 溢出。必须介于 1753 年 1 月 1 日上午 12:00:00 和 9999 年 12 月 31 日晚上 11:59:59 之间。

这是因为 Account.CreationDate 属性是 DateTime。我环顾四周,MSSQL 和 .NET 中的 DateTime 实际上并不相同。我试过,通过 FNH 映射强制列是“datetime2”,但这似乎没有帮助。

这是我的 Account 类(简化):

public class Account
{
    public virtual int Id { get; set; }
    public virtual string Comment { get; set;}
    public virtual DateTime CreationDate { get; set;}
    public virtual string Email { get; set;}
    public virtual string Password {get ; set;}
    public virtual string Locale {get; set;}

    public Account(string password, string email)
    {
        this.Email = email;
        SetNewPassord(password);
        this.CreationDate = DateTime.Now;
        this.Locale = "en-US";
    }
}

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

我称之为的代码:

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

请注意,出于调试的目的,我抛出了一些异常。那个输出有点超现实!

Account.Creation 日期:2/6/2013 5:32:29 PM;异常:System.Data.SqlTypes.SqlTypeException:SqlDateTime 溢出。必须介于 1753 年 1 月 1 日上午 12:00:00 和 9999 年 12 月 31 日晚上 11:59:59 之间。

4

1 回答 1

5

问题是 DateTime 属性没有设置为“可为空”,因此没有将此属性设置为“Null”,而是一直设置为 01/01/0001,因此触发了超出范围的错误。

public virtual DateTime? CreationDate { get; set;}因此,需要在类(即:)和映射( )中将属性设置为 Nullable Map(x => x.CreationDate).Nullable;

否则,即使您将属性设置为null,它也会显示为 01/01/0001。一旦属性变为可空,它的值就真的是空的并且查询是成功的。

于 2013-02-08T09:03:40.223 回答