Добавление и сохранение непостоянных объектов в постоянные объекты в NHibernate - PullRequest
0 голосов
/ 08 октября 2010

Может ли кто-нибудь объяснить это мне?

У меня есть стандартные отношения в моей MSSQL БД:

[item]
id
symbol

[item_version]
id
item_id (fk)
symbol

В отображении [item] есть стандартная BAG item_version с cascade = "all" и много-к-одному в отображении [item_version].

Это тестовый пример:

    [Test]
    public void AddNewVersionToPersistentObject()
    {
        //creating item
        Item i = new Item();
        i.Symbol = "Item 1 symbol";    

        //saving item
        Item.Dao.Save(i);
        long id = i.Id;

        //clearing session and getting item back from DB
        DataHelper.DaoFactory.ClearSession();
        Item itemFromDb = Item.Dao.GetById(id);

        //creating new versions
        ItemVersion v1 = new ItemVersion();
        v1.Symbol = "version 1 symbol";

        ItemVersion v2 = new ItemVersion();
        v2.Symbol = "version 2 symbol";

        //adding versions and saving item
        itemFromDb.AddItemVersion(v1);
        itemFromDb.AddItemVersion(v2);
        Item.Dao.SaveOrUpdate(itemFromDb);


        //clearing session, getting back item and checking results
        DataHelper.DaoFactory.ClearSession();
        Item itemFromDb2 = Item.Dao.GetById(id);
        Assert.AreEqual(2, itemFromDb2.ItemVersions.Count);
    }

Тест не пройден, когда я добавляю NEW ItemVersion к объекту Item, взятому из БД (как указано выше).

Когда я добавляю новые ItemVersions в новый Item и вызываю Save on Item - все работает нормально. Это почему?

1 Ответ

0 голосов
/ 08 октября 2010

Методы Save / Update / Delete / etc не сохраняют изменения в базе данных;они ставят в очередь только определенные действия в единице работы (сеансе)

На самом деле вам даже не нужно вызывать какие-либо из них для изменения постоянных объектов: это происходит автоматически во Flush (что, кстати, выне должен вызывать явно: используйте транзакцию вместо)

Дополнительная информация: http://nhibernate.info/doc/nh/en/index.html#manipulatingdata

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...