在MVC中编辑相关数据会导致错误

时间:2016-07-12 09:36:52

标签: c# asp.net-mvc entity-framework

我试图让this solution适应我的项目。

我有可以拥有多个ServiceAreas(多对多)的员工 即。

public class ServiceType
{   public int Id { get; set; }
...
    public virtual ICollection<ServiceSubtype> ServiceSubtypes { get; set; }
}

public class Employee
{ public int Id { get; set; }
...
public virtual ICollection<Employee> Employees{ get; set; }
}

在Employee的Edit操作的HttpPost中,我已将以下内容的等效项添加到我的项目中

var instructorCourses = new HashSet<int>
(instructorToUpdate.Courses.Select(c => c.CourseID));
我这样读了

var employeeServiceTypes = new HashSet<int>
(employee.ServiceTypes.Select(c => c.Id));

但就在那时我得到以下错误:

  

值不能为空。   参数名称:source

     

第140行:var employeeServiceTypes = new HashSet

     

第141行:(employee.ServiceTypes.Select(c =&gt; c.Id));

我无法解决这个问题。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

至少有一名员工有ServiceTypes = null

在这种情况下,您无法访问Id Select(c => c.Id) - 否则会出现此异常。

您必须通过过滤没有ServiceTypes的员工来避免访问,或者通过if条款来避免访问。

HashSet<int> employeeServiceTypes = new HashSet<int>();
if (employee != null && employee.ServiceTypes != null)
{
    foreach (int id in employee.ServiceTypes.Select(c => c.Id))
    {
        employeeServiceTypes.Add(id);
    }
}