Fluent NHibernate and Spring.net

来源:http://www.cnblogs.com/geovindu/archive/2016/04/21/5417907.html
-Advertisement-
Play Games

http://blog.bennymichielsen.be/2009/01/04/using-fluent-nhibernate-in-spring-net/ http://comments.gmane.org/gmane.comp.windows.dotnet.nhibernate.user.g ...


http://blog.bennymichielsen.be/2009/01/04/using-fluent-nhibernate-in-spring-net/

http://comments.gmane.org/gmane.comp.windows.dotnet.nhibernate.user.general/21840

http://codegur.com/2049968/configuring-asp-net-mvc-2-with-spring-net-and-fluentnhibernate

SQL:

CREATE TABLE StaffManager
(
	ManagerId INT IDENTITY(1,1) PRIMARY KEY,
	ManagerStaffIdKey INT FOREIGN KEY 
				REFERENCES StaffMember(StaffId),   --職員ID 外鍵
	ManagerIs BIT DEFAULT(1),						--賬號是否有效
	ManagerName NVARCHAR(50) NOT NULL,				--登錄賬號
	ManagerPassWord VARCHAR(50) NOT NULL,	        --密碼
	ManagerMail VARCHAR(100) NOT NULL,				--找回密碼郵箱
	ManagerDate DATETIME DEFAULT(GETDATE())	
	--管理人員ID 外鍵
)
GO

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spring.Data.NHibernate; //4.0
using NHibernate.Cfg;
using FluentNHibernate.Automapping;
using FluentNHibernate.Conventions.Helpers;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using System.Reflection;
using FluentNHibernate;
using NHibernate.Tool.hbm2ddl;
using NHibernate;

namespace BasicProject.NHibernateInfra.Implementation {
    public class FluentNhibernateLocalSessionFactoryObject : LocalSessionFactoryObject{
        ///// <summary>
        ///// Sets the assemblies to load that contain fluent nhibernate mappings.
        ///// </summary>
        ///// <value>The mapping assemblies.</value>
        //public string[] FluentNhibernateMappingAssemblies {
        //    get;
        //    set;
        //}

        public string[] FluentNhibernateMappingAssemblies { get; set; }
        public string ConnectionStringName { get; set; }
        static readonly object factorylock = new object();

        protected override void PostProcessConfiguration(Configuration config) {
            ConnectionStringName = "Server=geovindu;Database=geovindu;User ID=root;Password=geovindu";
            base.PostProcessConfiguration(config);
            FluentConfiguration fluentConfig = Fluently.Configure(config)
                .Database(MySQLConfiguration.Standard.ConnectionString(ConnectionStringName))
                .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true));

            Array.ForEach(FluentNhibernateMappingAssemblies,
                           assembly => fluentConfig.Mappings(
                                                    m => m.FluentMappings.AddFromAssembly(Assembly.Load(assembly))
                                                        .Conventions.Add(FluentNHibernate.Conventions.Helpers.DefaultLazy.Never())
                                                    )
                         );
            fluentConfig.BuildSessionFactory();
        }
    } //class
}

  

using System;
using System.Text;
using System.Collections.Generic;
using NHibernate.Validator.Constraints;


namespace Domain.Entities {
    
    public class StaffManager {
        public StaffManager() {
			CardCancellations = new List<CardCancellation>();
			CardRecords = new List<CardRecord>();
			JobRightsAssignments = new List<JobRightsAssignment>();
			StaffManagerLogs = new List<StaffManagerLog>();
			StaffUserChecks = new List<StaffUserCheck>();
			ViolateRegulations = new List<ViolateRegulation>();
        }
        public virtual int ManagerId { get; set; }
        public virtual StaffMember StaffMember { get; set; }
        public virtual bool? ManagerIs { get; set; }
        [NotNullNotEmpty]
        [Length(50)]
        public virtual string ManagerName { get; set; }
        [NotNullNotEmpty]
        [Length(50)]
        public virtual string ManagerPassWord { get; set; }
        [NotNullNotEmpty]
        [Length(100)]
        public virtual string ManagerMail { get; set; }
        public virtual DateTime? ManagerDate { get; set; }
        public virtual IList<CardCancellation> CardCancellations { get; set; }
        public virtual IList<CardRecord> CardRecords { get; set; }
        public virtual IList<JobRightsAssignment> JobRightsAssignments { get; set; }
        public virtual IList<StaffManagerLog> StaffManagerLogs { get; set; }
        public virtual IList<StaffUserCheck> StaffUserChecks { get; set; }
        public virtual IList<ViolateRegulation> ViolateRegulations { get; set; }
    }
}

  

using System; 
using System.Collections.Generic; 
using System.Text; 
using FluentNHibernate.Mapping;
using Domain.Entities; 

namespace Domain.Mappings {
    
    /// <summary>
    /// 
    /// </summary>
    public class StaffManagerMap : ClassMap<StaffManager> {
        
        public StaffManagerMap() {
			Table("StaffManager");
			LazyLoad();
			Id(x => x.ManagerId).GeneratedBy.Identity().Column("ManagerId");
			References(x => x.StaffMember).Column("ManagerStaffIdKey");
			Map(x => x.ManagerIs).Column("ManagerIs");
			Map(x => x.ManagerName).Column("ManagerName").Not.Nullable().Length(50);
			Map(x => x.ManagerPassWord).Column("ManagerPassWord").Not.Nullable().Length(50);
			Map(x => x.ManagerMail).Column("ManagerMail").Not.Nullable().Length(100);
			Map(x => x.ManagerDate).Column("ManagerDate");
			HasMany(x => x.CardCancellations).KeyColumn("CancelManagerIdKey");
			HasMany(x => x.CardRecords).KeyColumn("CardManagerIdKey");
			HasMany(x => x.JobRightsAssignments).KeyColumn("RightsManagerIdKey");
			HasMany(x => x.StaffManagerLogs).KeyColumn("ManagerIdKey");
			HasMany(x => x.StaffUserChecks).KeyColumn("CheckManagerIdKey");
			HasMany(x => x.ViolateRegulations).KeyColumn("ViolateManagerIdKey");
        }
    }
}

  

 public abstract class Repository<T> : ILongKeyedRepository<T> where T : class{
        private ISessionFactory sessionFactory;
        /// <summary>
        /// Session factory for sub-classes.
        /// </summary>
        public ISessionFactory SessionFactory {
            protected get { return sessionFactory; }
            set { sessionFactory = value; }
        }

        /// <summary>
        /// Get's the current active session. Will retrieve session as managed by the 
        /// Open Session In View module if enabled.
        /// </summary>
        public ISession CurrentSession {
            get { return SessionFactory.GetCurrentSession(); }
        }


        public T FindBy(long id) {
            return CurrentSession.Get<T>(id);
        }

        public IQueryable<T> All() {
            return CurrentSession.Query<T>();
        }

        public T FindBy(System.Linq.Expressions.Expression<Func<T, bool>> expression) {
            throw new NotImplementedException();
        }

        public IQueryable<T> FilterBy(System.Linq.Expressions.Expression<Func<T, bool>> expression) {
            return All().Where(expression).AsQueryable();
        }

        public void Add(T entity) {
            CurrentSession.Save(entity);
        }

        public void Add(IEnumerable<T> entities) {
            foreach (var entity in entities) {
                CurrentSession.Save(entity);    
            }
        }

        public void Update(T entity) {
            CurrentSession.Update(entity);
        }

        public void Delete(T entity) {
            CurrentSession.Delete(entity);
        }

        public void Delete(IEnumerable<T> entities) {
            foreach (var entity in entities) {
                CurrentSession.Save(entity);
            }
        }
    } //end class

  

 

    public class StaffManagerRepository : Repository<StaffManager> {

    } /

  Web.config:

  <spring>
    <context>
      <resource uri="~/Config/objects.xml"/>
      
      <!-- 嵌入在程式集中的配置文件 ,首先是程式集名稱,然後命名空間,最後文件名, 註意名稱的大小寫必須完全一致 -->
      <resource uri="assembly://geovindu.Dao/geovindu.Dao.Config/dataAccess.xml"/>
      <resource uri="assembly://geovindu.Dao/geovindu.Dao.Config/objects.xml"/>
      <resource uri="assembly://geovindu.Service/geovindu.Service.Config/objects.xml"/>
    </context>
    
    <!--資料庫配置伺服器地址-->
    <databaseSettings>
      <add key="db.server" value="LF-WEN\GEOVINDU"/>
      <add key="db.database" value="TSQLFundamentals2008"/>
      <add key="db.userid" value="sa"/>
      <add key="db.password" value="7888888"/>
    </databaseSettings>
  </spring>

  

objects.xml
    <object id="SessionFactory" type="geovindu.NHibernateInfra.Implementation.FluentNhibernateLocalSessionFactoryObject, geovindu.NHibernateInfra.Implementation">
        <!--<property name="DbProvider" ref="DbProvider"/>-->
        <property name="ConnectionStringName" value="MysqlConnection"/>
        <property name="ExposeTransactionAwareSessionFactory" value="true" />
        <property name="FluentNhibernateMappingAssemblies">
            <list>
                <value>geovindu.NHibernateInfra.Implementation</value>
            </list>
        </property>
        <property name="HibernateProperties">
            <dictionary>
                <entry key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
                <!--<entry key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/>
                <entry key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>-->
                <!--<entry key="current_session_context_class" value="Spring.Data.NHibernate.SpringSessionContext, Spring.Data.NHibernate33"/>-->
                <entry key="cache.use_second_level_cache" value="true" />
                <entry key="cache.provider_class"
                          value="NHibernate.Cache.HashtableCacheProvider,NHibernate" />
                <entry key="max_fetch_depth" value="0" />
            </dictionary>
        </property>

        <property name="ExposeTransactionAwareSessionFactory" value="true" />
    </object>

  
  <!-- Transaction Management Strategy - local database transactions -->
  <object id="transactionManager"
        type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate33">
    <property name="DbProvider" ref="DbProvider"/>
    <property name="SessionFactory" ref="SessionFactory"/>
  </object>

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 程式集載入 程式集載入,CLR使用System.Reflection.Assembly.Load靜態方法,當然這個方法我們自己也可以顯式調用。 還有一個Assembly.LoadFrom方法載入指定路徑名的程式集,實際上其內部是先通過AssemblyName.GetAssemblyName獲取Ass ...
  • MVC框架之所以如此受歡迎的原因之一就是它十分註意支持關註分離,使各個功能部件儘量能夠相互獨立。今天我們就來看看MVC4如何使用DI方法實現一些組件的獨立,使本來結合緊密的部件,松耦合。我現在所說的對於.net的一些初學者來說可能有點拗口,其實我也是一個實打實的初學者,自己開始看這段話的時候遲遲不能... ...
  • 做了一個網站,其中的線上留言板塊是用Repeater來顯示留言的,這樣可以用少的代碼還實現多的功能,但是不知道怎麼分頁,要是留言過多就會使頁面變的很長,能過查看眾多網友的經驗,知道用PagedDataSource來實現。 Repeater分頁,需要依靠PagedDataSource。這個類存在於Sy ...
  • 這裡要是多次使用 不及時釋放記憶體就會爆炸~ 解決辦法: 用windows下的GDI32.DLL類 使用辦法: 先引用system.runtime.serialzation類 如果解決方案配置是在Debug下麵的話 把gdi32.dll放在bing\debug 然後新建一個類 然後每次在轉化以後 一下 ...
  • 在學習編程中,||和| 被解釋為:||是邏輯操作符,而|是位操作符,但是它們的具體使用上的區別是什麼呢? 1、當||和|作為邏輯操作符時,看看它們都有什麼作用。請看下麵例子: 請看上圖輸出結果: 對於(1)來說,i > 5 為True,(i = i + 5) > 10為True,那麼a就為True, ...
  • 在學習編程中,&和&& 被解釋為:&&是邏輯操作符,而&是位操作符,但是它們的具體使用上的區別是什麼呢? 1、當&&和&作為邏輯操作符時,看看它們都有什麼作用。請看下麵例子: 請看上圖輸出結果: 對於(1)來說,i > 5 為True,(i = i + 5) > 10為True,那麼a就為True, ...
  • 一、Thrift是什麼? 關於Thrift的基本介紹,參看張善友的文章Thrift簡介。 二、為什麼使用微服務? 在公司的高速發展過程中,隨著業務的增長,子系統越來越多。各系統間又不同程度的在某些邏輯上出現重合的場景。為了高效率的開發,必然出現到重用這些邏輯的實現代碼的情況,通常的做法是直接引用相關 ...
  • 百度編輯器具有豐富文本編輯功能,且開源免費,其使用方法如下: 1.在官網上下載對應的Uditor壓縮包:http://ueditor.baidu.com/website/download.html 2.在項目根目錄下創建ueditor文件夾 ,並將下載的UEditor解壓後的文件放在ueditor文 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...