Dot-Net

Fluent NHibernate + 多個數據庫

  • June 30, 2012

我的項目需要處理三個數據庫,這意味著三個會話工廠。問題是如果我用流利的 nhibernate 做這樣的事情:

.Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))

工廠將獲取所有映射,甚至是對應於另一個數據庫的映射

我已經看到,使用自動映射時,您可以執行以下操作,並按命名空間進行過濾:

.Mappings(m => m.AutoMappings.Add(
   AutoMap
      .AssemblyOf<Product>()
      .Where(t => t.Namespace == "Storefront.Entities")))

對於流暢的映射,我還沒有找到類似的東西,這可能嗎?我能想到的唯一解決方案是:為每個數據庫映射類創建單獨的程序集,或者將每個實體顯式添加到工廠配置中。

如果可能的話,我寧願避免兩者。謝謝。

我已經使用 Fluent 映射文件上的(我自己的)屬性來完全實現這一點,以指示實體屬於哪個數據庫。我還有一個“預設”數據庫的概念,並且假定沒有屬性的映射文件駐留在預設數據庫中(它可能會減少您需要裝飾的類的數量)。然後我有初始化程式碼,它為每個數據庫創建一個會話工廠,並且對於每個數據庫,使用反射來查找所有 ClassMap 類,檢查屬性以確定它屬於哪個 DB,並相應地註冊每個 ClassMap。

映射文件範例:

 [FluentNHibernateDatabase("MySecurityDatabase")]
 public class SystemUserMap : ClassMap<SystemUser>
 {
   public SystemUserMap()
   {
     Id(x => x.SystemUserId);
     Map(x => x.LoginId);
     Map(x => x.LoginPassword);
     Map(x => x.UserFirstName);
     Map(x => x.UserSurname);
     References(x => x.UserOrganisation, "OrganisationId");
   }
 }

顯然,我已經定義了一個引用/使用的數據庫列表。

到目前為止,我的實現工作,但我遇到了一個障礙(我希望有人能幫忙):

我在這裡問了我的問題: How to identify a specific entity’s Session Factory with Fluent NHibernate and Multiple Databases

引用自:https://stackoverflow.com/questions/2655861