Как отобразить существующие таблицы в иерархию наследования в NHibernate? - PullRequest
0 голосов
/ 29 сентября 2011

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

Существующая таблица уже сопоставлена ​​и, по сути, имеет кучуполей со следующей проблемой ....

существующий класс

class A
{
    // Id etc
    public virtual Client Client { get; set; }
}

со структурой таблицы, такой как

 table A (
        Id INT IDENTITY NOT NULL,
       Client_id INT null,
       primary key (Id)
    )

Теперь я хочу представить базовый класс

class Base
{
   // Id etc
    public virtual Client Client { get; set; }
}

, в результате чего появится таблица типа ...

   table Base (
       Id INT IDENTITY NOT NULL,
       Client_id INT null,  
       primary key (Id)
    )

и изменится A на

class A : Base
{
   // clients moved to the base...
}

, что приведет ктаблица: -

table A(
           Base_id INT IDENTITY NOT NULL,
           Id INT not null,     // I will need to keep the existing Id field...
           Client_id INT null,  // this Client now conflicts with the Base client
           primary key (Base_id)
        )

Я использую таблицу для наследования классов.

проблема в том, что ...

«Клиент» будет на таблице «База ", а также это на существующей таблице" А ".Я хочу иметь возможность использовать «Клиент» на «А», как своего рода переопределение.

Как мне это сделать?я могу это сделать?

или возможно, что в таблице «Base» вообще нет «клиента», а затем во всех таблицах подкласса они определяют «клиент»?(что делает запрос интересным)

1 Ответ

0 голосов
/ 29 сентября 2011

, если только для запросов NH должен поддерживать запросы по интерфейсу

class A : IHasClient
{
    // Id etc
    public virtual Client Client { get; set; }
}

class SomeOther : IHasClient
{
    // Id etc
    public virtual Client Client { get; set; }
}


var classesWithClients = session.QueryOver<IHasClient>().List();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...