C# 向NHibernate中的持久对象添加和保存非持久对象
有人能给我解释一下吗 我的MSSQL数据库中有标准关系: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
[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()不会这样做!?