NHibernate 批量删除
参照案例下载:/Files/liuxiaojun/LXJ.NHibernate.Demo.rar
场景描述:
Users,UserProfiles
删除一个User时,连带删除此User拥有的Profile
NHibernate的批量删除可以采用两种方式:
1、先把要删除的对象查询出来,然后循环对查询出的对象集合进行删除,代码如下:
session.Delete(exists_user);
IList<UserProfileInfo> profiles = (from p in session.Query<UserProfileInfo>()
where p.UserProfilePK.USER_ID == user_id
select p).ToList();
foreach (UserProfileInfo profile in profiles)
{
session.Delete(profile);
}
IList<UserProfileInfo> profiles = (from p in session.Query<UserProfileInfo>()
where p.UserProfilePK.USER_ID == user_id
select p).ToList();
foreach (UserProfileInfo profile in profiles)
{
session.Delete(profile);
}
2、使用session.Delete(string query, object value, global:NHibernate.Type.IType type)重载方法,代码如下:
session.Delete(exists_user);
//批量删除Profiles
session.Delete(" from UserProfileInfo p where p.UserProfilePK.USER_ID = ? ", user_id, NHibernateUtil.String);
//批量删除Profiles
session.Delete(" from UserProfileInfo p where p.UserProfilePK.USER_ID = ? ", user_id, NHibernateUtil.String);
以上语法为HQL语法,里面的 UserProfileInfo 不是表名称,而是我们的持久化类对象。
注意:如果同一事务中,批量删除时还有后续的插入操作,那么需要在删除结束后就调用 session.Flush() 来提交语句
posted on 2012-05-07 22:06 HOT SUMMER 阅读(1896) 评论(0) 编辑 收藏 举报