使用Fluent NHibernate映射公共列

使用Fluent NHibernate映射公共列,nhibernate,fluent-nhibernate,multi-tenant,Nhibernate,Fluent Nhibernate,Multi Tenant,我们有一个多租户数据库,即多个客户端使用的公共数据库,因此每个表都有一个“ClientID”列,指示租户。 我们正在为ORM使用Fluent NHibernate,并寻找解决多租户问题的最佳方法:每个映射类都需要映射ClientID,但是,值将来自用户帐户对象,即来自某种类型的用户会话 有没有一个好的简单的方法来实现这一点,使用流利的NHibernate?如果是这样,您能提供一个示例吗?我不完全确定这是否是您的要求,但如果您需要每个类映射到ClientId,这里有一个示例 基本上,每个类都有一个

我们有一个多租户数据库,即多个客户端使用的公共数据库,因此每个表都有一个“ClientID”列,指示租户。 我们正在为ORM使用Fluent NHibernate,并寻找解决多租户问题的最佳方法:每个映射类都需要映射ClientID,但是,值将来自用户帐户对象,即来自某种类型的用户会话


有没有一个好的简单的方法来实现这一点,使用流利的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" );
    }
}
公共类用户帐户
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟IList票据{get;set;}
}
公共课条例草案
{
公共虚拟int-BillId{get;set;}
公共虚拟用户帐户用户{get;set;}
}
公共类用户帐户:ClassMap
{
公共用户帐户()
{
Id(x=>x.Id).列(“ClientId”);
Map(x=>x.Name);
有很多(x=>x张账单);
}
}
公共类BillMap:ClassMap
{
公共BillMap()
{
Id(x=>x.Id).列(“BillId”);
引用(x=>x.User).Column(“ClientId”);
}
}
因此,在账单表中,有一个ClientId列,它在数据库中实际上是一个外键,引用UserAccount表的主键列,该列也将命名为ClientId

如果您真的要有大量的表,这些表都将有一个ClientId列,那么您还可以选择将其抽象为一个基类,您的实体从该基类继承,该基类上已经有UserAccount属性。您也可以对Fluent NHibernate映射文件使用相同的基类方法