我有一段代码可以向实体集合添加元素(一对多关系)。这是 ISession.Save
的版本 using (ISession session = sessionFactory.OpenSession())
{
var package = session.QueryOver<Package>().Where(x => x.ID == selectedPackage).SingleOrDefault();
foreach(var themeId in selectedThemes)
{
var selectedTheme = session.QueryOver<HBTheme>().Where(x => x.ID == themeId).SingleOrDefault();
if (selectedTheme != null)
{
package.Themes.Add(new PackageTheme() { Package = package, Theme = selectedTheme });
}
}
session.Save(package);
}
那个版本对我不起作用。由于我用 ITransaction 编写了测试版,我将其更改为以下内容:
using (ISession session = sessionFactory.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
var package = session.QueryOver<Package>().Where(x => x.ID == selectedPackage).SingleOrDefault();
foreach(var themeId in selectedThemes)
{
var selectedTheme = session.QueryOver<HBTheme>().Where(x => x.ID == themeId).SingleOrDefault();
if (selectedTheme != null)
{
package.Themes.Add(new PackageTheme() { Package = package, Theme = selectedTheme });
}
}
transaction.Commit();
}
现在它有效。 package.Themes 集合中的元素存储在数据库中。怎么会?谢谢!
答案 0 :(得分:7)
比较苹果和橘子!
在案例1中发生的情况可能是从未触发刷新操作。在案例2中,项目可能由于集合上的级联而被保存,而事务提交会触发刷新。