Dot-Net
Fluent NHibernate + 多個數據庫
我的項目需要處理三個數據庫,這意味著三個會話工廠。問題是如果我用流利的 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