Nhibernate 多對多級聯更新


問題是這樣的,有兩個表:文章(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存在着無數的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM