因为这两行…
EmployeeService es = new EmployeeService();
CityService cs = new CityService();
…不要在构造函数中使用参数,我想您在类中创建了上下文。当您加载city1
…
Payroll.Entities.City city1 = cs.SelectCity(...);
…您将附加city1
到中的上下文CityService
。稍后,您将添加city1
对新内容的引用,Employee
e1
并在中添加对上下文的e1
引用city1
EmployeeService
。结果,您已city1
附加了异常所抱怨的两个不同的上下文。
您可以通过在服务类之外创建上下文并在两个服务中注入和使用它来解决此问题:
EmployeeService es = new EmployeeService(context);
CityService cs = new CityService(context); // same context instance
您的服务类看起来有点像存储库,它们仅负责单个实体类型。在这种情况下,当您为服务使用单独的上下文时,一旦涉及实体之间的关系,您总是会遇到麻烦。
您还可以创建一个服务,该服务负责一组紧密相关的实体,例如一个EmployeeCityService
(具有单个上下文),并将方法中的整个操作委派Button1_Click
给该服务的方法。