有人可以爲我解釋這個嗎?在NHibernate中添加並保存不持久對象到持久對象
我有我的MSSQL數據庫標準關係:
[item]
id
symbol
[item_version]
id
item_id (fk)
symbol
在[項目]映射存在與級聯= 「全」 和many-to-之一[item_version]映射標準item_version BAG。
這是測試用例:
[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新項目,並調用保存項目 - 一切工作正常。這是爲什麼?
我想補充一點,AddItemVersion()方法處理設置回參考ItemVersion對象項目,所以這是沒有問題的。 – Adam 2010-10-08 08:31:23
當我調用Session.Flush()而不是Item.Dao.SaveOrUpdate(itemFromDb)時 - 一切工作正常!爲什麼Flush()將新的子對象保存到數據庫並且在父對象上調用SaveOrUpdated()不會那麼做!? – Adam 2010-10-08 13:17:09