У меня есть две разные модели данных, которые сопоставляются с одним и тем же объектом. Мне нужно было создать второй объект под названием ParkedCar, который идентичен Car (и, следовательно, наследуется от него), чтобы остановить nhibernate, жалуясь на то, что для одного и того же объекта существуют два сопоставления.Использование 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
}
Единственная проблема в том, что, когда я пришел, чтобы получить автомобиль из базы данных, используя критерии 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" >
Как это остановить?
Это не имеет смысла для меня, почему вы хотите, чтобы отделить таблицы в первую очередь. Не могли бы вы просто использовать NHibernate для запроса автомобилей, где '' IsParked = true? '? – Doug
Потребовалось слишком много времени, чтобы объяснить, почему это должно быть так. В основном в приложении, которое мы создаем, определенные объекты должны храниться по-разному в определенное время, но мы хотим оградить приложение от этого. – Dan
Но вы не защищаете свое приложение от него вообще. Ваше приложение должно знать, когда запрашивать автомобиль, или когда запрашивать ParkedCar, когда оба объекта обслуживают одну и ту же функцию. То, что я предлагаю, - это другая архитектура, облегчающая необходимость делать подобные вещи вообще. – Doug