問題是這樣的,有兩個表:文章(Article)和分類(Lable),這兩者之間的關系是多對多關聯,如果你用Nhibernate來保存數據的話非常的好操作,新建Article,然后把Lable值賦值給Article的Lables(這個是在Article類里面有定義的),像這樣:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyMvc4Project.Models
{
/// <summary>
/// t_Article:實體類(屬性說明自動提取數據庫字段的描述信息)
/// </summary>
[Serializable]
public class Article
{
/// <summary>
/// id
/// </summary>
public string Id { get; set; }
/// <summary>
/// 標題
/// </summary>
public string Title { get; set; }
/// <summary>
/// 內容
/// </summary>
public string Contents { get; set; }
/// <summary>
/// 點擊瀏覽次數
/// </summary>
public int ClickCount { get; set; }
/// <summary>
/// 創建時間
/// </summary>
public DateTime? CreateTime { get; set; }
/// <summary>
/// 更新時間
/// </summary>
public DateTime? UpdateTime { get; set; }
public IList<Lable> Lables { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyMvc4Project.Models
{
/// <summary>
/// t_Lable:實體類(屬性說明自動提取數據庫字段的描述信息)
/// </summary>
[Serializable]
public class Lable
{
/// <summary>
/// id
/// </summary>
public string Id { get; set; }
/// <summary>
/// 標簽名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 顯示等級
/// </summary>
public int Level { get; set; }
/// <summary>
/// 創建時間
/// </summary>
public DateTime? CreateTime { get; set; }
/// <summary>
/// 文章
/// </summary>
public IList<Article> Articles { get; set; }
}
}
上面定義的是文章類和分類類別類,現在要保存文章數據,像這樣:
Article article =new Article() article.Id=Guid.NewGuid().toString(); article.Title=title; article.Contents=contents; article.CreateTime=DateTime.Now(); article.UpdateTime=DateTime.Now(); article.Lables=lableList; _session.Save(article);
這樣的保存好操作,但是我在級聯更新的時候遇到問題了,在網上搜索了一下,好像國內使用Nhibernate的人特別少,資料也很少,好像在博客園里Nhibernate比較專業一點的就只有李永京的博客了,不過我沒有找到關於級聯更新的文章,非常的遺憾。於是我又在官網上查找Nhibernate級聯的資料,於是我按照官網上的資料這樣操作:
public void Update(Article bean)
{
//這行代碼非常的重要,對於nhibernate多對多級聯更新
var article = (Article)_session.Load(typeof(Article), bean.Id);
var lblList = bean.Lables.Select(
lable => (Lable) _session.Load(typeof (Lable), lable.Id)
).ToList();
article.User = bean.User;
article.Title = bean.Title;
article.Contents = bean.Contents;
article.UpdateTime = DateTime.Now;
article.Lables = lblList;
try
{
_session.Update(article);
_session.Flush();
}
catch (Exception)
{
throw;
}
}
分析:
官網的思路是這樣的,先用
var article = (Article)_session.Load(typeof(Article), bean.Id);
通過文章id獲取到文章數據,然后再賦值更新,而且所關聯的分類數據(Lable)也是這樣操作的(先獲取后更新),我不知道這樣做是不是正確的,也希望博客園里的專家看了我的文章后提出自己的意見或建議,這樣我才知道我這樣做是不是很完美。
我還在想一個問題,如果所關聯的數據有千萬條的話,這樣關聯的更新是不是影響性能?唉,對Nhibernate存在着無數的問題。
