Свободный NHibernate, динамически изменить Таблицу отображения? - PullRequest
3 голосов
/ 18 февраля 2010

с беглым nhibernate, есть ли способ динамически переключать таблицу отображения во время выполнения?

Например:

public class XYClassMap : ClassMap<XY>
{
  public XYClassMap( )
  {
    Table("XYTable");
    Id(d => d.Id).GeneratedBy.Identity();
    Map(d => d.Value);
    (...)

Учитывая, что существует несколько плагинов, каждый из них использует этот один класс, но они должны работать с разными таблицами. Я ищу что-то вроде этого:

public class XY {
  public string Tablename {get; set;}
}

public class XYClassMap : ClassMap<XY>
{
  public XYClassMap( )
  {
    Table(Tablename);
    Id(d => d.Id).GeneratedBy.Identity();
    Map(d => d.Value);
    (...)

Таким образом, каждый метод действия может работать с одним и тем же классом, и ему нужно будет установить только одно свойство «Имя таблицы».

Спасибо за любую помощь,

Штеффен

1 Ответ

2 голосов
/ 18 февраля 2010

Отображения компилируются при запуске приложения, и как только это произойдет, их нельзя изменить.

Если ваши плагины используют разные таблицы, то по определению они не являются одинаковыми сущностями (и, следовательно, одинаковыми отображениями). Если все ваши плагины определяют разные таблицы, которые имеют одинаковую структуру, вам нужны отдельные сопоставления, но вы можете абстрагировать фактические определения.

Возможно, что-то вроде этого: каждый плагин определяет свое собственное отображение для этой таблицы, которое происходит от абстрактного класса, содержащего фактические отображения, кроме имени таблицы.

public abstract class PluginMap<T> : ClassMap<T> where T : IPlugin
{
  public PluginMap()
  {
    Id(d => d.Id).GeneratedBy.Identity();
    Map(d => d.Value);
  }
}

public class PluginOneMap : PluginMap<PluginOne>
{
  public PluginOneMap()
  {
    Table("PluginOne");
  }
}

public class PluginTwoMap : PluginMap<PluginTwo>
{
  public PluginTwoMap()
  {
    Table("PluginTwo");
  }
}

В качестве альтернативы, вы можете определить их как подклассы в иерархии таблица-на-подкласс или таблица-на-наследование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...