2015-04-03 2 views
0

Я прочитал много тем, посвященных сохранению многих отношений с EF 6.1, но я больше не получаю. Таблица соединений с reservationId и facilityId по-прежнему остается пустой после сохранения моей брони.Сохранение многих ко многим отношениям в EF 6.1

Это мои модели:

public class Reservation 
{ 
    [Key] 
    public int reservationId { get; set; } 

    //Lijst met Facilities, Many to Many 
    public virtual ICollection<Facility> FacilitiesList { get; set; } 
} 

public class Facility 
{ 
    [Key] 
    public int FacilityId { get; set; } 
    public decimal FacilityPrice { get; set; } 
    public string FacilityType { get; set; } 

    //Many to Many 
    public virtual ICollection<Reservation> reservationList { get; set; } 

    public Facility() 
    { 
     //Instantiate our implementation of ICollection 
     this.reservationList = new HashSet<Reservation>(); 
    } 
} 

Я создаю таблицу присоединиться переопределив OnModelCreating:

public partial class DataContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<Reservation>() 
        .HasMany<Facility>(s => s.FacilitiesList) 
        .WithMany(c => c.reservationList) 
        .Map(cs => 
        { 
         cs.MapLeftKey("ReservationId"); 
         cs.MapRightKey("FacilityId"); 
         cs.ToTable("ReservationFacility"); 
        }); 

    } 
} 

Edit: Вот где я сохраняю оговориться:

public ActionResult Create() 
    { 
     ViewBag.FacilitiesList = new SelectList(_facilityrepository.GetAll(), "FacilityId", "FacilityType"); 
     return View(); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "ReservationId,ArrivalDate,LeaveDate,CampingSpotId,UserId,PersonsAmount,FacilityType,FacilityPrice")] Reservation reservation) 
    { 
     _reservationrepository.Add(reservation); 
     return RedirectToAction("ShowAvailableSpots", new { ArrivalDate = reservation.ArrivalDate, LeaveDate = reservation.LeaveDate, ReservationID = reservation.ReservationId }); 
    } 

сейчас У меня есть таблицы. Я могу сохранить объекты, и я могу выбрать их при создании резервирования с помощью MultiSelectList.

Почему таблица соединений всегда пуста? Что мне нужно сделать, чтобы заполнить FacilitiesList, чтобы я мог получить эти данные в любом месте моего проекта?

+0

Вы можете добавить код, в котором вы сэкономить 'Reservation'? – SWilko

+0

вы исключите единственную часть своего кода, которую нам нужно увидеть! :) – renakre

+0

Да, проверьте редактирование! – Forza

ответ

0

Поскольку я был совершенно новым в этом вопросе, у меня не было понятия, что мне нужно было инициализировать и заполнить список. Thx to @dellywheel для указания меня в правильном направлении!

Вот рабочий код:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "ReservationId,ArrivalDate,LeaveDate,CampingSpotId,UserId,PersonsAmount,FacilityType,FacilityPrice")] Reservation reservation, int[] SelectedFacilities) 
    { 
     //Instantiate our facilities list! 
     reservation.FacilitiesList = new List<Facility>(); 

     foreach (int facId in SelectedFacilities) 
     { 
      var facType = _facilityrepository.GetFacilityType(facId); 
      var facPrice = _facilityrepository.GetFacilityPricePerDay(facId); 
      reservation.FacilitiesList.Add(new Facility { FacilityId = facId, FacilityType = facType, FacilityPrice = facPrice}); 
     } 

     _reservationrepository.Add(reservation); 
     return View() //code omitted 
    } 
Смежные вопросы