NHibernate отображает множество дочерних сущностей в одну сущность - PullRequest
0 голосов
/ 20 августа 2010

У меня в настоящее время есть модель бронирования, такая как:

public class RoomBooking : Entity, IBooking
{
    public virtual Client Client { get; set; }
    public virtual Address Address { get; set; }
    public virtual IList<BookingPeriod> BookingPeriods{get;set;}...


public class BookingPeriod : Entity
{
    public virtual IEnumerable<IBooking> Bookings { get; set; }
    public virtual DateTime StartTime { get; set; }
    public virtual DateTime EndTime { get; set; }...

Бронирования имеют много-много-много общего с BookingPeriods. Можно сделать три разных типа бронирования, и у каждого из них есть связанный тип.

Как лучше всего отобразить это для NHibernate? В настоящее время я использую S # arp, который использует функциональность AutoMapping Fluent NHibernate. Это приводит к ошибке в свойстве Bookings, так как оно пытается сослаться на несопоставленный класс (IBooking).

1 Ответ

1 голос
/ 20 августа 2010

Если вы используете свободный NHibernate, вы можете сделать это, в котором указывается имя класса, которому вы сопоставляете бронирование, а не Automapper, пытающийся сопоставить интерфейс с IBooking:

 public class RoomBooking : Entity, IBooking
{
    public virtual Client Client { get; set; }
    public virtual Address Address { get; set; }
    public virtual IList<BookingPeriod> BookingPeriods { get; set; }

}

public class RoomBookingMap : EntityMap<RoomBooking>
{
    public RoomBookingMap()
    {
        Map(x => x.Client);
        Map(x => x.Address);
        HasManyToMany(x => x.BookingPeriods);
    }

}

public class BookingPeriod : Entity
{
    public virtual IEnumerable<IBooking> Bookings { get; set; }
    public virtual DateTime StartTime { get; set; }
    public virtual DateTime EndTime { get; set; }
}

public class BookingPeriodgMap : EntityMap<BookingPeriod>
{
    public BookingPeriodgMap()
    {
        Map(x => x.StartTime);
        Map(x => x.EndTime);
        HasManyToMany<RoomBooking>(x => x.Bookings);
    }

}
 public class EntityMap<T> : ClassMap<T> where T : Entity
    {
        public EntityMap()
        {
            Id(x => x.Id)
                .UnsavedValue(-1)
                .Column("id");

        }


    }
...