C# 向NHibernate中的持久对象添加和保存非持久对象

C# 向NHibernate中的持久对象添加和保存非持久对象,c#,.net,nhibernate,C#,.net,Nhibernate,有人能给我解释一下吗 我的MSSQL数据库中有标准关系: [item] id symbol [item_version] id item_id (fk) symbol 在[item]映射中有一个标准的item\u版本包,在[item\u版本]映射中有cascade=“all”和多对一 这是测试用例: [Test] public void AddNewVersionToPersistentObject() { //creating item

有人能给我解释一下吗

我的MSSQL数据库中有标准关系:

[item]
id
symbol

[item_version]
id
item_id (fk)
symbol
在[item]映射中有一个标准的item\u版本包,在[item\u版本]映射中有cascade=“all”和多对一

这是测试用例:

    [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);
    }
当我将NEWItemVersion对象添加到从DB获取的Item对象时(如上所述),测试失败


当我向新项目添加新的ItemVersions,并调用Save on Item时,一切正常。为什么呢

保存/更新/删除/etc方法不会保留对数据库的更改;它们仅对工作单元(会话)中的某些操作排队

事实上,您甚至不需要调用它们中的任何一个来修改持久对象:这会在Flush时自动发生(顺便说一句,您不应该显式地调用:改用事务)


更多信息:

我想添加AddItemVersion()方法处理设置ItemVersion对象中对项的引用,因此这不是问题所在。当我调用Session.Flush()而不是Item.Dao.SaveOrUpdate(itemFromDb)时,一切都正常!为什么Flush()会将新的子对象保存到DB,而在父对象上调用的SaveOrUpdated()不会这样做!?