• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            We do not always find visible happiness in proportion to visible virtue

            夢幻白樺林

            SHARE

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              14 Posts :: 58 Stories :: 62 Comments :: 0 Trackbacks

            公告

            常用鏈接

            留言簿(5)

            搜索

            •  

            最新隨筆

            最新評論

            閱讀排行榜

            多對多關(guān)系在數(shù)據(jù)庫也是比較常見的,它通過一個中間表將兩個主表關(guān)聯(lián)起來。
            下面來看看多對多關(guān)聯(lián)在nh的實現(xiàn),示例是一個User和Group之間的多對多關(guān)聯(lián)。

            先來看看User類的映射信息:
            many-to-many mapping 

            在多對多定義中,定義了中間表為UserGroups,此表只有兩個字段:user_id和group_id;用于關(guān)聯(lián)Users和Groups表。

            User的定義:

            public class User {

               public User() {
               }

               public int UserId
               {
                  get { return userId; }
                  set { userId = value; }
               }

               public int Name
               {
                  get { return name; }
                  set { name = value; }
               }

               public IDictionary Groups
               {
                  get { return groups; }
                  set { groups = value; }
               }

               private int userId;
               private string name;
               private IDictionary groups = new Hashtable();

            } //class User

            這里用一個數(shù)據(jù)字典IDictionary對角來保存組對象。

            再來看看Group類的映射信息:
            many 

            這里many-to-many的定義和User類映射信息中的差不多。

            組類的定義:

            public class Group {

               public Group() {
               }

               public int GroupId
               {
                  get { return groupId; }
                  set { groupId = value; }
               }

               public int Name
               {
                  get { return name; }
                  set { name = value; }
               }

               public int Description
               {
                  get { return description; }
                  set { description = value; }
               }

               public IDictionary Users
               {
                  get { return users; }
                  set { users = value; }
               }

               private int groupId;
               private string name;
               private IDictionary users = new Hashtable();

            } //class Group

            注意:多對多沒有主次之分,保存時的兩邊都要save!

            下面給出部分測試代碼。

            public TestCreate() {
               User user1 = new User();
               user1.Name = "test1";
               User user2 = new User();
               user2.Name = "test2";

               Group group1 = new Group();
               group1.Name = "group1"; 
               Group group2 = new Group();
               group2.Name = "group2";

               user1.Groups.Add( group2, group2 );
               user2.Groups.Add( group1. group1 );
               group1.Users.Add( user2, user2 );
               group2.Users.Add( user1, user1 );

               ITransactioin trans = null;
               try {
                  trans = session.BeginTransaction();

                  Session.Save( user1 );
                  Session.Save( user2 );
                  Session.Save( group1 );
                  Session.Save( group2 );

                  trans.Commit();
               }
               catch ( Exception e ) {
                  if ( trans != null ) trans.Rollback();
                  throw e;
               }
               finally {
                  session.Close();
               }
            }

            以上測試代碼中session的相關(guān)操作請查看相關(guān)文檔。

            在實際應(yīng)用中,我較少使用many-to-many映射,當(dāng)然這要從性能和實際需要考慮。
            我的做法是一個elements來取得所有關(guān)聯(lián)的identity, 然后在需要的時候才加載對象,有點類似lazy, 但lazy有一個問題,就是session必須沒有被釋放,這在分層開發(fā)中較難辦到。

            原文:http://www.seaskyer.net/Index/Catalog44/182.html

            posted on 2007-09-19 11:31 colys 閱讀(554) 評論(0)  編輯 收藏 引用 所屬分類: C#.Net 、NHibernate

            亚洲午夜精品久久久久久浪潮 | 久久久久亚洲AV无码麻豆| 久久久SS麻豆欧美国产日韩| 精品多毛少妇人妻AV免费久久| 国产成人精品久久亚洲高清不卡| 久久精品国产一区二区三区不卡 | 91精品国产综合久久婷婷| 久久久久免费看成人影片| 久久996热精品xxxx| 久久综合狠狠综合久久| 久久久久亚洲av成人无码电影| 久久综合狠狠综合久久| 热综合一本伊人久久精品 | 久久亚洲国产精品成人AV秋霞 | 久久国语露脸国产精品电影| AA级片免费看视频久久| 国内精品人妻无码久久久影院| 一本色道久久综合狠狠躁篇 | 久久婷婷五月综合成人D啪| 欧美久久综合性欧美| 日韩人妻无码一区二区三区久久| 青草影院天堂男人久久| 国内精品久久久久影院一蜜桃| 精品国产99久久久久久麻豆| 久久久久久av无码免费看大片| 色综合久久久久| 久久九九有精品国产23百花影院| 精品熟女少妇a∨免费久久| 伊人久久大香线蕉AV色婷婷色| 亚洲伊人久久成综合人影院| 久久亚洲2019中文字幕| 精品久久综合1区2区3区激情| 中文字幕亚洲综合久久2| 久久精品一区二区三区不卡| 久久精品国产秦先生| 久久午夜电影网| 99久久99久久精品国产| 久久精品国产国产精品四凭| 久久久久国产视频电影| 伊人久久无码精品中文字幕| 久久综合亚洲色一区二区三区|