我們有一個多租戶數據庫 - 即多個客戶端使用的公共數據庫,因此每個表都有一個表示租戶的「ClientID」列。 我們使用Fluent NHibernate進行ORM並尋找解決多租戶問題的最佳方法:每個Mapping類需要映射ClientID,但該值將來自用戶帳戶對象 - 即來自某種用戶會話。用Fluent NHibernate映射一個共同的列
是否有一個很好很容易的方法來實現這個使用流利NHibernate?如果是這樣,你能舉一個例子嗎?
我們有一個多租戶數據庫 - 即多個客戶端使用的公共數據庫,因此每個表都有一個表示租戶的「ClientID」列。 我們使用Fluent NHibernate進行ORM並尋找解決多租戶問題的最佳方法:每個Mapping類需要映射ClientID,但該值將來自用戶帳戶對象 - 即來自某種用戶會話。用Fluent NHibernate映射一個共同的列
是否有一個很好很容易的方法來實現這個使用流利NHibernate?如果是這樣,你能舉一個例子嗎?
我不完全確定這是不是你要求的,但是如果你需要每個類映射到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映射文件執行相同的基類方法。