我们有一个多租户数据库 - 即多个客户端使用的公共数据库,因此每个表都有一个表示租户的“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映射文件执行相同的基类方法。