Как прикрепить объект, который не сохранился, к объекту, загруженному из БД с помощью NHIbernate - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть объект, который выглядит следующим образом:

public class Driver
{
    IVehicle Vehicle {get;set;}
}

и несколько различных классов, которые реализуют IVehicle (Car, Bike, Train ...)

Как выбрать какой конкретныйРеализация IVehicle мой Драйвер держит, и помните этот выбор при следующей загрузке драйвера из БД?

Я использую NHibernate 3.0 для сохранности вместе с FluentNHibernate для отображения.* РЕДАКТИРОВАТЬ

Хорошо, я наконец понял это.Мне нужно было сопоставить транспортное средство и отобразить каждый подкласс следующим образом:

public void VehicleMap : ClassMap<IVehicle>
{
    public VehicleMap()
    {
        Id(v => v.Id); // Needed to add a property which will be used as Id
         DiscriminateSubClassesOnColumn("TYPE");
    } 
}

public void CareMap : SubclassMap<Car>
{
    public CarMap()
    {
         DiscriminatorValue("CAR");
    }
}

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

1 Ответ

1 голос
/ 29 апреля 2011

Вам нужно решить, как будет работать ваше отображение наследования. Смотри документацию http://nhibernate.info/doc/nh/en/index.html#inheritance

Как только вы это сделаете, вы можете отобразить свой класс Driver, чтобы каскадировать зависимость Vehicle. После этого NHibernate автоматически загрузит нужный элемент из базы данных.

UPDATE

Вам нужно будет сохранить имя типа в виде строки. Тогда ваш класс Vehicle может быть несопоставленным свойством, которое выполняет что-то вроде:

public class Driver
{
    private string vehicleTypeName;
    private IVehicle vehicle;

    public IVehicle Vehicle
    {
        get
        {
            if (vehicle == null)
            {
                vehicle = typeof(IVehicle).Assembly
                                   .CreateInstance(vehicleTypeName);
            }
            return vehicle;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...