2012-08-02 70 views
2

我們有一個多租戶數據庫 - 即多個客戶端使用的公共數據庫,因此每個表都有一個表示租戶的「ClientID」列。 我們使用Fluent NHibernate進行ORM並尋找解決多租戶問題的最佳方法:每個Mapping類需要映射ClientID,但該值將來自用戶帳戶對象 - 即來自某種用戶會話。用Fluent NHibernate映射一個共同的列

是否有一個很好很容易的方法來實現這個使用流利NHibernate?如果是這樣,你能舉一個例子嗎?

回答

1

我不完全確定這是不是你要求的,但是如果你需要每個類映射到ClientId,這裏有一個例子。

基本上,每個類都有一個UserAccount屬性或任何類將存儲具有ClientId屬性的用戶帳戶信息。然後在你的Fluent NHibernate映射中,你可以使用References()方法將這些類映射到一起。見下面的例子:

public class UserAccount 
{ 
    public virtual int Id { get; set; } 

    public virtual string Name { get; set; } 

    public virtual IList<Bill> Bills { get; set; } 
} 

public class Bill 
{ 
    public virtual int BillId { get; set; } 

    public virtual UserAccount User { get; set; } 
} 

public class UserAccount : ClassMap<UserAccount> 
{ 
    public UserAccount() 
    { 
     Id(x => x.Id).Column("ClientId"); 

     Map(x => x.Name); 

     HasMany(x => x.Bills); 
    } 
} 

public class BillMap : ClassMap<Bill> 
{ 
    public BillMap() 
    { 
     Id(x => x.Id).Column("BillId"); 
     References(x => x.User).Column("ClientId"); 
    } 
} 

所以在你的賬單表,你將有一個clientId列這在數據庫術語實在是一個外鍵引用這將也被命名的ClientID UserAccount表的主鍵列。

如果你真的要有大量的表都將有一個ClientId列,你也可以選擇將它抽象出來到你的實體繼承的基類中,該類將已經擁有UserAccount財產就可以了。您也可以爲您的Fluent NHibernate映射文件執行相同的基類方法。

相關問題