C# EF MVC4在更新多对多关系中的条目后返回null

C# EF MVC4在更新多对多关系中的条目后返回null,c#,linq,asp.net-mvc-4,entity-framework-6,C#,Linq,Asp.net Mvc 4,Entity Framework 6,我与驾驶员和车辆实体有多对多关系,在创建驾驶员时,可以将许多车辆分配给驾驶员,这很好,但当我想要编辑和更新记录时,我得到的车辆集合为空 以下是我的模型: public class Driver { public int driverId {get;set;} public string Name {get;set;} public virtual ICollection<Vehicle> Vehicles {get;set;} } public class

我与驾驶员和车辆实体有多对多关系,在创建驾驶员时,可以将许多车辆分配给驾驶员,这很好,但当我想要编辑和更新记录时,我得到的车辆集合为空

以下是我的模型:

 public class Driver {
   public int driverId {get;set;}
   public string Name {get;set;}
   public virtual ICollection<Vehicle> Vehicles {get;set;}
 } 
 public class Vehicle {
   public int Vehicle_Id {get;set;}
   public string Vehicle_Type_Name {get;set;}
   public virtual ICollection<Driver> Drivers {get;set;}
 } 
下面是编辑的后期操作:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(DriverViewModel driverVm)
    {
        var list = db.vehicles.Select(v =>
            new { v.Vehicle_Id, v.Vehicle_Type_Name }).ToList();

        foreach (var item in list)
        {
            driverVm.VehicleList.Add(
         new Vehicle { 
             Vehicle_Id = item.Vehicle_Id, 
             Vehicle_Type_Name = item.Vehicle_Type_Name 
        });
        }

        if (ModelState.IsValid)
        {
            db.Entry(driverVm.driver).State = EntityState.Modified;
            db.SaveChanges();

            List<Vehicle> vhcls = new List<Vehicle>();

            Driver driver = db.drivers.Find(driverVm.driver.driverId);
            vhcls = driver.Vehicles.ToList();

            foreach (Vehicle veh in vhcls)
            {
                driver.Vehicles.Remove(veh);
            }
            db.SaveChanges();

            foreach (var item in driverVm.SelectedVehicles)
            {
               Vehicle vehicle = db.vehicles.Find(item);
               driverVm.driver.Vehicles.Add(vehicle);
            }
            db.SaveChanges();

            TempData["DriverSuccess"] = "1";
            return RedirectToAction("Edit");
        }
        else
        {
            ViewBag.DriverError = "1";
        }
        return View(driverVm);
    }

上述代码中的列表“vhcls”为空,它应该包含与驾驶员关联的车辆,但“driver”对象在“driverVm.driver.vehicles”中包含空集合,而不包含关联的车辆,我漫游得很糟糕,但找不到解决方案..请帮助..

仅使用
查找将不包括相关实体。很可能driver包含正确的实体,但Vehicles集合为空

尝试使用
Include
确保相关实体将被包括,并使用
FirstOrDefault
模拟
Find
的结果

Driver driver = db.drivers
    .Include(d => d.Vehicles)
    .FirstOrDefault(d => d.Id == driverVm.driver.driverId);

vhcls = driver.Vehicles.ToList();

编辑:我最初没有注意到您已经在使用惰性加载,所以我对答案进行了一些调整。

谢谢@kettch,您太棒了,我以前一直在使用惰性加载,但效果不好……急切加载很好,再次感谢。。。。。。
    public ActionResult Edit(int id = 0)
    {
        DriverViewModel DriverVm = new DriverViewModel();


        var list = db.vehicles.Select(
        v => new { v.Vehicle_Id,v.Vehicle_Type_Name }).ToList();
        DriverVm.driver = db.drivers.Find(id);

        foreach (var item in list)
        {
            DriverVm.VehicleList.Add(new Vehicle { Vehicle_Id = item.Vehicle_Id, Vehicle_Type_Name = item.Vehicle_Type_Name });
        }
        foreach (var item in DriverVm.driver.Vehicles)
        {
            DriverVm.SelectedVehicles.Add(item.Vehicle_Id);
        }

        return View(DriverVm);
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(DriverViewModel driverVm)
    {
        var list = db.vehicles.Select(v =>
            new { v.Vehicle_Id, v.Vehicle_Type_Name }).ToList();

        foreach (var item in list)
        {
            driverVm.VehicleList.Add(
         new Vehicle { 
             Vehicle_Id = item.Vehicle_Id, 
             Vehicle_Type_Name = item.Vehicle_Type_Name 
        });
        }

        if (ModelState.IsValid)
        {
            db.Entry(driverVm.driver).State = EntityState.Modified;
            db.SaveChanges();

            List<Vehicle> vhcls = new List<Vehicle>();

            Driver driver = db.drivers.Find(driverVm.driver.driverId);
            vhcls = driver.Vehicles.ToList();

            foreach (Vehicle veh in vhcls)
            {
                driver.Vehicles.Remove(veh);
            }
            db.SaveChanges();

            foreach (var item in driverVm.SelectedVehicles)
            {
               Vehicle vehicle = db.vehicles.Find(item);
               driverVm.driver.Vehicles.Add(vehicle);
            }
            db.SaveChanges();

            TempData["DriverSuccess"] = "1";
            return RedirectToAction("Edit");
        }
        else
        {
            ViewBag.DriverError = "1";
        }
        return View(driverVm);
    }
        Driver driver = db.drivers.Find(driverVm.driver.driverId);
        vhcls = driver.Vehicles.ToList();

        foreach (Vehicle veh in vhcls)
        {
            driver.Vehicles.Remove(veh);
        }
        db.SaveChanges()
Driver driver = db.drivers
    .Include(d => d.Vehicles)
    .FirstOrDefault(d => d.Id == driverVm.driver.driverId);

vhcls = driver.Vehicles.ToList();