0

DB を埋めるためのこのコードがありますが、終了後も DB はまだ空です。hibernate_unique_key テーブルの数値のみが高くなります。

次に興味深いのは、デバッグ中のインスタンスには、保存後に id がありますが、1、2、3 のようではありませんが、60083、60084 などのように非常に高いということです。保存するのは数行のみです)。

それ以前は、参照などに問題がありましたが、現在はエラー メッセージや例外はありません。

コードがあります:

using System;
using NHibernate.Cfg;
using SharpArch.Data.NHibernate;
using LaboratorniMetody.Data.NHibernateMaps;
using SharpArch.Core.PersistenceSupport;
using LaboratorniMetody.Core;

namespace LaboratorniMetody.FillSchema
{
    class Program
    {
        private static Configuration configuration;

        static void Main(string[] args)
        {
            configuration = NHibernateSession.Init(new SimpleSessionStorage(), new String[] { "LaboratorniMetody.Data" },
                                            new AutoPersistenceModelGenerator().Generate(),
                                            "../../../../app/LaboratorniMetody.Web/NHibernate.config");

            IRepository<Laboratory> LaboratoryRepository = new Repository<Laboratory>();
            Laboratory Laboratory1 = new Laboratory() { Name = "Hematologie" };//Method
            Laboratory l = LaboratoryRepository.SaveOrUpdate(Laboratory1);
            Laboratory Laboratory2 = new Laboratory() { Name = "Patologie" };//Method
            LaboratoryRepository.SaveOrUpdate(Laboratory2);
            Laboratory Laboratory3 = new Laboratory() { Name = "Laboratoře" };//Method
            LaboratoryRepository.SaveOrUpdate(Laboratory3);
        }
    }
}

Project.Core クラスから NUnit によって生成された DB スキーマを使用します。

問題を見つける必要があるアイデアはありますか? 問題なく動作する2つの非常によく似たプロジェクトがあります。私はそれらの1つからこのコードをコピーしましたが、実質的に違いはありません(DBモデルなどを除く)。

4

1 に答える 1

1

トランザクションで変更を行い、後でトランザクションをコミットする必要があります。

using(var tx = NHibernateSession.Current.BeginTransaction())
{
   IRepository<Laboratory> LaboratoryRepository = new Repository<Laboratory>();
   Laboratory Laboratory1 = new Laboratory() { Name = "Hematologie" };//Method
   Laboratory l = LaboratoryRepository.SaveOrUpdate(Laboratory1);
   Laboratory Laboratory2 = new Laboratory() { Name = "Patologie" };//Method
   LaboratoryRepository.SaveOrUpdate(Laboratory2);
   Laboratory Laboratory3 = new Laboratory() { Name = "Laboratoře" };//Method
   LaboratoryRepository.SaveOrUpdate(Laboratory3);

   tx.Commit();
}

SharpArchContribプロジェクトwikiを参照することをお勧めします。このプロジェクトには、Windowsアプリ/サービスでのSharpArchの使用と、そこからのトランザクション属性の使用方法に関するサンプルがいくつかあります。

https://github.com/sharparchitecture/Sharp-Architecture-Contrib/wiki/

于 2012-04-17T11:28:22.650 に答える