在运行时构建Fluent NHibernate Maps

时间:2015-02-20 17:46:59

标签: fluent-nhibernate connect mirth

我正在开发一个查看由Mirth Connect v3创建的数据库的项目。

在此版本中,表格是在运行时根据创建的频道创建的。

例如,如果我创建一个新频道,它会在具有唯一ID的表中创建一个条目。然后,使用该id创建一组表,并将该id添加到名称的末尾。即对于id为8的通道,创建一个名为d_ms8(以及其他)的表。

所有这些表(d_ms *)都具有相同的结构。

我想知道的是,是否有办法在Fluent NHibernate中映射此类事物。

    public class MapChannelStats : ClassMap<ChannelStatsObj>
{
    public const String TableName = "d_ms8";

    public MapChannelStats()
    {
        Table(TableName);

        Id(x => x.MetadataID).Column("metadata_id");
        Map(x => x.ServerID).Column("server_id");
        Map(x => x.Errored).Column("error");
        Map(x => x.ErroredLifetime).Column("error_lifetime");
        Map(x => x.Filtered).Column("filtered");
        Map(x => x.FilteredLifetime).Column("filtered_lifetime");
        Map(x => x.Received).Column("received");
        Map(x => x.ReceivedLifetime).Column("received_lifetime");
        Map(x => x.Sent).Column("sent");
        Map(x => x.SentLifetime).Column("sent_lifetime");
    }
}

谢谢,

布鲁斯。

1 个答案:

答案 0 :(得分:0)

您要问的是一件困难的事情,因为我认为您无法在运行时更改表的名称。但是,如果您改变方法,应该有一些可能性,例如:

  • 您可以创建一个列来指定租户ID,而不是为其创建整个表。然后,您可以专门为此列设置过滤器(reference),您可以这样更改:

    Session.EnableFilter("tenant-filter").SetParameter("TenantId", "2");
    
  • 或者您可以为租户创建一个数据库并使用Boot.Multitenancy之类的组件。