Использование nHibernate для сопоставления двух разных моделей данных одной модели сущностей - PullRequest
2 голосов
/ 14 мая 2010

У меня есть две разные модели данных, которые отображаются на одну и ту же сущность Car. Мне нужно было создать вторую сущность с именем ParkedCar, которая идентична Car (и, следовательно, наследует от нее), чтобы nhibernate не жаловался, что для одной сущности существуют два сопоставления.

public class Car
{
     protected Car()
     {
       IsParked = false;
     }

    public virtual int Id { get; set; }  
    public  bool IsParked { get; internal set; }
}

public class ParkedCar : Car
{
        public ParkedCar()
        {
            IsParked = true;
        }
       //no additional properties to car, merely exists to support mapping and signify the                           car is parked
}

Единственная проблема заключается в том, что, когда я прихожу, чтобы получить Автомобиль из базы данных, используя Criteria API, примерно так:

SessionProvider.OpenSession.Session.CreateCriteria<Car>()
                    .Add(Restrictions.Eq("Id", 123))
                    .List<Car>();

Запрос возвращает объекты автомобилей, которые взяты из модели данных ParkedCar. Это как если бы nhibernate по умолчанию специализированной сущности. И отображения вызывающе выглядят в нужном месте:

<class name="Car" xmlns="urn:nhibernate-mapping-2.2" table="tblCar">

<class name="ParkedCar" xmlns="urn:nhibernate-mapping-2.2" table="tblParkedCar" >

Как мне это остановить?

Ответы [ 2 ]

3 голосов
/ 14 мая 2010

Я думаю, вам нужно установить свойство полиморфизма для отображения классов

<class "Car" polymorphism="explicit" ...
0 голосов
/ 14 мая 2010

Поскольку ParkedCar расширяет Car, запрос для Car будет возвращать объекты Car и ParkedCar. Вы можете ограничить тип, используя HQL, используя свойство special class , т.е. from Car c where c.class = Car. Я не думаю, что вы можете сделать это с помощью API критериев.

В качестве альтернативы вы можете отфильтровать список после извлечения, если он имеет разумный размер.

...