<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      NHibernate 知識點整理

      1、實體bool類型屬性與數據庫映射。如實體中有bool屬性IsDelete.配置如下

      <property column="IsDelete" name="IsDelete" type="YesNo" ></property>

      或者 

      <property name="Deleted" type="NHibernate.Type.YesNoType,NHibernate">
        <column name="Deleted" sql-type="char(1)" default="0" not-null="true"></column>
      </property>

      2、若將數據寫入到表時,希望某個字段不被寫入則如下映射

      <property column="IsDelete" name="IsDelete" insert="false"></property>

      3、兩個對象之間多對多時,生成兩個表之間的映射關系表.如一下生成 人員與公司之間的映射關系表UserCompanyMap.UserID與CompanyID作為聯合主鍵

      <set name="Companies" table="UserCompanyMap" >
        <key column="UserID" />
        <many-to-many column="CompanyID" class="Domain.Company,Domain" />
      </set>

      4、通過ICritetia接口做關聯查詢;如有many-to-one關系的Profile和Department。現在希望通過sql直接查詢返回dto ProfileDTO 。sql如下;

      SELECT p.ItemID, p.Name, p.Summary, d.ItemID, d.Name 
      FROM Profile p inner join Department d on p.DepartmentID = d.ItemID
       public class ProfileDTO 
          { 
              private int _itemID; 
              private int _departmentID; 
              private string _departmentName; 
              private string _name; 
              private string _summary; 
       
              public virtual int ItemID 
              { 
                  get { return _itemID; } 
                  set { _itemID = value; } 
              } 
       
              public virtual int DepartmentID 
              { 
                  get { return _departmentID; } 
                  set { _departmentID = value; } 
              } 
       
              public string DepartmentName 
              { 
                  get { return _departmentName; } 
                  set { _departmentName = value; } 
              } 
       
              public string Name 
              { 
                  get { return _name; } 
                  set { _name = value; } 
              } 
       
              public string Summary 
              { 
                  get { return _summary; } 
                  set { _summary = value; } 
              } 
          } 
          
          public static IList List() 
          { 
              ICriteria criteriaSelect = Persistence.Session.CreateCriteria(typeof(Profile)); 
                   
              criteriaSelect.CreateAlias("Department", "d"); 
                   
              criteriaSelect.SetProjection( 
                  Projections.ProjectionList() 
                  .Add(Projections.Property("ItemID"), "ItemID") 
                  .Add(Projections.Property("Name"), "Name") 
                  .Add(Projections.Property("Summary"), "Summary") 
                  .Add(Projections.Property("d.ItemID"), "DepartmentID") 
                  .Add(Projections.Property("d.Name"), "DepartmentName")); 
       
              criteriaSelect.AddOrder(Order.Asc("Name")); 
              criteriaSelect.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(ProfileDTO))); 
              return criteriaSelect.List(); 
          } 
        

       5、ICriteia 接口進行數據分頁查詢時,一般情況下,可能如下使用:            

                  
                  ICriteria criteria = session.CreateCriteria(typeof(T));
                  foreach
      (ICriterion cri in queryConditions) { criteria.Add(cri); } ICriteria criteriaRowCount = CriteriaTransformer.Clone(criteria); recordCount = criteriaRowCount.SetProjection(Projections.RowCount()) .UniqueResult<int>(); foreach (ICriterion cri in queryConditions) { detachedCriteria.Add(cri); }

                  if (IsPage)
                  {
                    int skipCount=(pageIndex - 1)*pageSize;
                    criteria.SetFirstResult(skipCount).SetMaxResults(*pageSize);
                  }

                  criteria.SetResultTransformer(new DistinctRootEntityResultTransformer());

      return criteria.List<T>();

      但是這樣可能會導致數據分頁出現問題。如果實體T沒有和其他表的關聯關系,這樣取數據顯然是可行的。但是如果關聯過多,而T又不是領域里的聚合根,則可能導致分頁問題。

      原因是NHibernate使用left join 關聯多表進行查詢時,查詢出滿足條件的數據,然后按照SetFirstResult(skipCount).SetMaxResults(*pageSize)進行獲取,然后去重,再顯

      示,這樣在過濾掉重復數據后,返回的數據就會比pageSize少。如果pageSize比NHibernate進行left join 后的結果還多的話,那就沒有問題。但是一旦pageSize少于left join的

      記錄數,則分頁還存在問題.

      解決辦法:

                ICriteria criteria = session.CreateCriteria(typeof(T));
                          foreach (ICriterion cri in queryConditions)
                          {
                              criteria.Add(cri);
                          }
                          ICriteria criteriaRowCount = CriteriaTransformer.Clone(criteria);                    
                          recordCount = criteriaRowCount.SetProjection(Projections.RowCount())
                              .UniqueResult<int>();
                          int skipCount = (pageIndex - 1)*pageSize;
                          criteria.AddOrder(new Order(orderField, isAscending));
                          DetachedCriteria detachedCriteria = DetachedCriteria.For<T>();
                          detachedCriteria.SetProjection(Projections.Distinct(Projections.Id()));
                          foreach (ICriterion cri in queryConditions)
                          {
                              detachedCriteria.Add(cri);
                          }
                          List<object> list;
                  if (IsPage)list = detachedCriteria.GetExecutableCriteria(session).SetFirstResult(skipCount).SetMaxResults(pageSize).List<object>().ToList();
                  else
      list = detachedCriteria.GetExecutableCriteria(session).List<object>().ToList();
                  criteria.Add(Restrictions.In(GetIndentity<T>(), list));//GetIndentity<T>() 獲取實體標識名,即對應數據庫主鍵的實體屬性名稱
                 criteria.SetResultTransformer(new DistinctRootEntityResultTransformer()); 

      return criteria.List<T>();

       6、持久化枚舉類型

      <property name="HouseType">
        <column name="HouseType" sql-type="varchar(10)" default="0" not-null="true"></column>
      </property>

       

      7、Hql查詢直接返回對象

       

      const string hql = @"SELECT new KeyValuePair(COUNT(log.Point)
                                         ,user.DepartmentName) 
                                          FROM Log log ,User user 
                                          WHERE log.UserGuid=user.UserGuid
                                          GROUP BY user.DepartName";                
                      IQuery query = session.CreateQuery(hql);                
                      return query.List<KeyValuePair>();
      

      同時需要給KeyValuePair定義映射,(不需要映射到表)如:

      <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="" namespace="">
        <import class="" />
      </hibernate-mapping>

       8、NHibernate的日志不影響你使用Log4Net寫日志

      <?xml version="1.0" encoding="utf-8" ?>
        <log4net>
      
          <root>
            <!--如果只需要看看Sql設置INFO就夠了,如果你要調試可以設置為DEBUG或ALL-->
            <priority value="INFO" />
            <appender-ref ref="rollingFile" />
          </root>
      
          <logger name="myLog">
            <level value="INFO" />
            <appender-ref ref="rollingFile1" />
          </logger>
      
          <appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
      
            <param name="File" value="log.txt" />
            <param name="AppendToFile" value="false" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy.MM.dd" />
            <param name="StaticLogFileName" value="true" />
      
            <layout type="log4net.Layout.PatternLayout,log4net">
              <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n" />
            </layout>
          </appender>
      
          <appender name="rollingFile1" type="log4net.Appender.RollingFileAppender,log4net" >
      
            <param name="File" value="log1.txt" />
            <param name="AppendToFile" value="false" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy.MM.dd" />
            <param name="StaticLogFileName" value="true" />
      
            <layout type="log4net.Layout.PatternLayout,log4net">
              <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n" />
            </layout>
          </appender>
      
        </log4net>

      使用Log4Net

      ILog Log= LogManager.GetLogger("myLog"); 
      Log.Info(
      "記錄日志");

       9、配置C# Decimal類型

      <column name="totalPrice" precision="22" scale="0" />

       10、配置屬性說明:

           1)<property>元素 insert屬性:設置為false,在insert語句中不包含這個字段,表示永遠不會被插入,默認true
            2)<property>元素 update屬性:設置為false,在update語句中不包含這個字段,表示永遠不會被修改,默認true
            3)<class>元素 mutable屬性:設置為false就是把所有的<property>元素的update屬性設置為了false,說明這個對象不會被更新,默認true
            4)<property>元素 dynamic-insert屬性:設置為true,表示insert對象的時候,生成動態的insert語句,如果這個字段的值是null就不會加入到insert語句當中.默認false
            5)<property>元素 dynamic-update屬性,設置為true,表示update對象的時候,生成動態的update語句,如果這個字段的值是null就不會被加入到update語句中,默認false
            6)<class>元素 dynamic-insert屬性:設置為true,表示把所有的<property>元素的dynamic-insert屬性設置為true,默認false
            7)<class>元素 dynamic-update屬性:設置為true,表示把所有的<property>元素的dynamic-update屬性設置為true,默認false

       

       參考:

      http://blog.sina.com.cn/s/blog_7ffb8dd501014v2e.html

      posted @ 2014-03-12 17:09  tyb1222  閱讀(704)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产在线啪| 亚洲伊人精品久视频国产| 欧美啪啪网| 茂名市| 自拍偷区亚洲综合第二区| 久久热精品视频在线视频| 国产精品综合av一区二区国产馆 | 国产精品区一二三四久久| 中文字幕国产精品自拍| 亚洲区精品区日韩区综合区| 部精品久久久久久久久| 国产成人理论在线视频观看| 亚洲国产日韩一区三区| 国产欧美日韩综合精品一区二区| 国产二区三区不卡免费| 伊人春色激情综合激情网| 国产成人午夜福利在线播放| 日韩精品国产二区三区| 国产仑乱无码内谢| 亚洲一二区在线视频播放| 日韩精品一区二区三区激情视频| 日韩精品一区二区三区激情视频| 国产一区二区三区在线观| 国产中文字幕精品在线| 99视频在线精品国自产拍| 日韩在线成年视频人网站观看| 亚洲国产精品特色大片观看完整版| 国产精品自拍视频我看看| 国产精品日韩中文字幕| 国产免费性感美女被插视频| 九九热精彩视频在线免费| 欧美怡春院一区二区三区| 精品无码av无码专区| 精品国产伦理国产无遮挡| 99久久久国产精品免费无卡顿| 国产盗摄xxxx视频xxxx| 欧美一区二区三区性视频| 2021亚洲国产精品无码| 特黄aaaaaaaaa毛片免费视频| 国产麻豆成人传媒免费观看| 中文字幕理伦午夜福利片|