2

データベースでNHibernateを使用してオブジェクトを永続化します

Appオブジェクトにはプロパティが定義されています。

public virtual DateTime ReleaseDate { get; set; }

mappingClass で:

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

sqlServer 2008 では、その dataTypedateTimeは nullable であり、nullable ではありません。

初めてエラーなしでデータベースに保存します。しかし、アプリ情報を更新した後、私は遭遇しました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あり、null ではありません。

なぜこの例外が発生するのか混乱していますか?

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は、プロパティを持つDBからオブジェクトを取得していたことですLastActivityDate

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

DBに情報を含むデバイスオブジェクトを追加した後、このプロパティをモデルに追加しました。このプロパティは null でしたが、LastActivityDate を null 許容プロパティとして定義していませんでした。

したがって、このオブジェクトは app オブジェクトの同じセッションにありました。セッションをフラッシュすると、LastActivityDatenull だったため、SqlDateTime 例外が発生しました。

それは簡単です。しかし、私はそれを見つけるのに何時間も費やしています!!

于 2014-03-09T11:34:09.980 に答える