2012-08-02 66 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映射文件执行相同的基类方法。

相关问题