2014-09-19 5 views
0

Хорошо, я опишу это как можно проще. Например - у меня есть две таблицы в базе данных, Employee & Профиль. Сотрудник имеет внешний ключ для идентификатора профиля, поэтому 1 Профиль может быть назначен для многих сотрудников, чтобы определить их права доступа, все хорошо и хорошо.Entity Framework Повторное добавление существующих объектов базы данных

В EF с использованием C# - При выборе сказать создание сотрудника и настройку уже существующего профиля, как показано ниже, он пытается снова добавить профиль в базу данных?

using (var ds = new DSEntities()) 
       { 
        Employee e = new Employee(); 
        e.AccessProfile = ds.AccessProfiles.First(); 
        ds.Employees.Add(e); 
        ds.SaveChanges(); 
       } 

Только запись сотрудника является новой и профиль не является. Может ли кто-нибудь подтвердить, почему он это делает? Я могу установить ключ Employee.AccessProfileID напрямую и просто установить его в файл ds.AccessProfiles.First(). AccessProfileID, поэтому я не работаю с объектом и не пытаюсь добавить его снова как просто ссылку, но я действительно не думаю, что мне тоже нужно, и я должен что-то упустить, я могу выбрать эти элементы непосредственно как объекты, но их назначение всегда приводит к повторному добавлению базы данных и т. д.

ответ

0

Самый простой способ добавить существующий профиль будет установив AccessProfileID в объекте Employee, что-то вроде этого:

using (var ds = new DSEntities()) 
       { 
        Employee e = new Employee(); 
        e.AccessProfileId = ds.AccessProfiles.First().Id; 
        ds.Employees.Add(e); 
        ds.SaveChanges(); 
       } 

А почему эф создает новый профиль при выполнении кода из вашего примера, он должен сделать что-то Wi th, как он обрабатывает графики. Поскольку объект Employee имеет EntityState.Added, я предполагаю, что он передает его сам и дочерним объектам. Для получения дополнительной информации here's сообщение от Julie Lerman по той же теме.

Смежные вопросы