删除不使用NHibernate
问题描述:
我有了多个流派视频实体给定列表中存在记录,删除不使用NHibernate
public class Video
{
public int Id { get; set; }
// other fields omitted for brevity
public IList<Genre> Genres { get; set; }
}
public class Genre
{
public int Id { get; set; }
public string Name { get; set; }
// fields omitted for brevity
}
起初我填充从XML文件包含所有类型的视频实体及其流派和每个流派的视频(一个视频可能会出现多次,在不同的流派下)。
我需要定期刷新我的视频副本,这意味着我需要删除所有不再映射到特定类型的视频。在例程中,我只有一个当前映射的视频流派的列表,但我需要打破视频和流派之间的链接,以便不再映射。
在原始的SQL我可以说:
DELETE FROM VideoGenre WHERE [email protected] AND VideoID NOT IN (@VideoIdList)
凡VideoIdList可能是 “1,2,3,4,5,6”。
我该如何使用NHibernate完成同样的事情?我应该使用HQL还是原始SQL?
另一种方法可以检索所有不匹配VideoIdList的视频(我希望这个列表几乎总是空的 - 视频不会经常改变类型:)),然后从每个视频的流派集合中删除流派然后更新()流派。这种方法似乎像浪费到数据库的行程。缓存是否意味着只有一次旅行,任何删除操作都会被删除?
答
如何像:
var genreId = 25;
var videos = new int[] { 1, 2, 3, 4, 5 };
session.CreateQuery("DELETE FROM VideoGenre vg WHERE vg.GenreId=:genreId AND vg.VideoID NOT IN (:videos)")
.SetParameter("genreId", genreId)
.SetParameterList("videos", videos)
.ExecuteUpdate();
更多信息here。
酷感谢拉斐尔。我之前找到了你的链接,并使用session.CreateSqlQuery和你发布的相同查询来实现。 – 2010-09-28 00:29:32