有人可以帮我解释一下吗?
我在MSSQL DB中有标准关系:
[item]
id
symbol
[item_version]
id
item_id (fk)
symbol
在[item]映射中,有一个标准的item_version BAG,其中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对象添加到从DB获取的Item对象时(如上面编码的那样)。
当我将新ItemVersions添加到新Item并调用Save on Item时 - 一切正常。这是为什么?
答案 0 :(得分:0)
保存/更新/删除/ etc方法不会持久更改数据库;他们只在工作单元(会话)中排队某些行动
实际上,你甚至不需要调用它们中的任何一个来修改持久对象:这在Flush上自动发生(顺便说一下,你不应该明确调用它:改为使用事务)
更多信息:http://nhibernate.info/doc/nh/en/index.html#manipulatingdata