2015-02-20 6 views
0

Я работаю над проектом, который смотрит на базу данных, созданную Mirth Connect v3.Building Fluent NHibernate Maps at runtime

В этой версии таблицы создаются во время выполнения на основе созданных каналов.

Например, если я создаю новый канал, он создает запись в таблице с уникальным идентификатором. Затем, используя этот идентификатор, создается набор таблиц с указанным идентификатором в конце имени. т.е. для канала с 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"); 
    } 
} 

Спасибо,

Брюс.

ответ

0

Это сложная вещь, о которой вы спрашиваете, потому что я думаю, что вы не можете изменить имя таблицы во время выполнения. Однако, если вы измените свой подход, должны быть какие-то возможности, как:

  • Вы можете создать столбец для указания арендатора ID, вместо того чтобы создавать целую таблицу для него. Затем, вы можете установить фильтр специально для этой колонки (reference), которые вы можете изменить, как это:

    Session.EnableFilter("tenant-filter").SetParameter("TenantId", "2"); 
    
  • Или вы могли бы создать базу данных, для которой арендатор и использовать компонент как Boot.Multitenancy.

+0

Hello David. Спасибо, но, к сожалению, это база данных, которую я не контролирую. Вот почему это боль. –

+0

Я подозреваю, что мне придется использовать другую технологию для этой части. Возможно, LINQ. –

+0

Я вижу. В этом случае, я думаю, вам, возможно, придется использовать простые SQL-запросы. –