dra*_*fly 2 nhibernate hibernate
我有一段代码,可以向实体集合添加元素(一对多关系).这是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);
}
Run Code Online (Sandbox Code Playgroud)
那个版本对我不起作用.正如我用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();
}
Run Code Online (Sandbox Code Playgroud)
现在它的工作原理.package.Themes集合中的元素存储在数据库中.怎么会?谢谢!
比较苹果和橘子!
在案例1中发生的情况很可能是从未触发刷新操作.在案例2中,项目可能由于集合上的级联而被保存,而事务提交会触发刷新.
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |