2010-09-27 80 views
0

我有了多個流派視頻實體給定列表中存在記錄,刪除不使用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的視頻(我希望這個列表幾乎總是空的 - 視頻不會經常改變類型:)),然後從每個視頻的流派集合中刪除流派然後更新()流派。這種方法似乎像浪費到數據庫的行程。緩存是否意味着只有一次旅行,任何刪除操作都會被刪除?

回答

2

如何像:

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

+0

酷感謝拉斐爾。我之前找到了你的鏈接,並使用session.CreateSqlQuery和你發佈的相同查詢來實現。 – 2010-09-28 00:29:32