Поскольку эти две строки ...
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
методу этой службы.