【问题标题】:Saving many to many relationship in EF 6.1在 EF 6.1 中保存多对多关系
【发布时间】:2015-04-03 13:45:10
【问题描述】:

我已经阅读了许多关于保存与 EF 6.1 的多对多关系的主题,但我没有进一步了解。保存预订后,reservationIdfacilityId 的联接表仍然为空。

这些是我的模型:

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");
                    });

    }
}

编辑:这里是我保存预订的地方:

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,以便我可以在我的项目中的任何地方获取这些数据?

【问题讨论】:

  • 你能在保存Reservation的地方添加代码吗?
  • 您排除了我们需要查看的唯一代码部分! :)
  • 是的,检查编辑!
  • 好的,谢谢代码。我可以看到您正在添加_reservationrepository.Add(reservation);,但没有将其与相关FacilitiesList 保存到上下文中

标签: c# entity-framework many-to-many


【解决方案1】:

因为我对此完全陌生,所以我不知道我需要初始化和填充列表。感谢@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 
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多