NHibernate的可能無法更新你上面顯示的方式mail_subscriptions
但它可以使用批量查詢,做到在單次往返到數據庫。
此示例考慮Subscriptions
映射爲一個Component
使用HasMany
雖然大致相同的技術可以如果映射只是一個普通的HasMany
使用。我還假設每個用戶已經在mail_subscriptions
表中爲subscribed
的每個郵寄列表設置爲false
。
public class User{
public virtual string Id {get; set;}
public virtual IList<MailSubscription> Subscriptions {get; set;}
}
public class MailSubscription{
public virtual int ListId {get; set;}
public virtual bool Subscribed {get; set;}
}
public void UpdateSubscriptions(string userid, int[] mailingListIds){
var user = session.Get<User>(userid);
foreach(var sub in
user.Subscriptions.Where(x=> mailingListIds.Contains(x.ListId))){
sub.Subscribed=true;
}
session.Update(user);
}
現在當工作單元完成後,您應該看到像這樣產生的SQL作爲單次往返數據庫發送。
update mail_subscriptions set subscribed=true where user_id='me' and listid=21
update mail_subscriptions set subscribed=true where user_id='me' and listid=14
update mail_subscriptions set subscribed=true where user_id='me' and listid=15
update mail_subscriptions set subscribed=true where user_id='me' and listid=19