Quelqu'un pourrait-il expliquer cela pour moi?Ajouter et enregistrer des objets non persistants à un objet persistant dans NHibernate
J'ai relations standard dans mon MSSQL DB:
[item]
id
symbol
[item_version]
id
item_id (fk)
symbol
Dans la cartographie [point] il y a un sac standard item_version avec cascade = "all" et beaucoup à un dans la cartographie [item_version].
Tel est le cas de l'essai:
[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);
}
test échoue, quand j'ajoutant NOUVEAUX ItemVersion objets à l'objet de l'objet pris à partir de DB (comme code ci-dessus).
Lorsque j'ajoute de nouvelles ItemVersions à un nouvel élément et que j'appelle Enregistrer sur l'élément - tout fonctionne correctement. Pourquoi donc?
Je voudrais ajouter que la méthode gère AddItemVersion() Retour au réglage référence au point dans l'objet ItemVersion, donc ce n'est pas la question. – Adam
Lorsque j'appelle Session.Flush() au lieu de Item.Dao.SaveOrUpdate (itemFromDb) - tout fonctionne bien aussi! Pourquoi Flush() enregistre de nouveaux objets enfants dans DB et SaveOrUpdated() appelé parent ne le fait pas !? – Adam