2015-11-12 5 views
0

Я пытаюсь сохранить объект с помощью EF 7, но когда я пытаюсь его обновить, мои внешние значения ключа (свойства навигации) теряются. Внешние ключи имеют нулевое значение в базе данных после запуска кода ниже.Свойства навигации теряются при обновлении объекта

UserTask s = new UserTask() 
     { 
      Id = 10027, 
      Description ="test change", 
      Title = "Test change", 
      DueDate = DateTime.Now.AddHours(3), 
      CreatedBy = db.Users.Where(c=>c.UserName=="Bob").First(), 
      AssignedTo = db.Users.Where(c => c.UserName == "Stephen").First(), 
      Status = stat 
     }; 

     db.UserTasks.Attach(s); 

     db.Entry(s).State = EntityState.Modified; 
     db.SaveChanges(); 

ответ

1

Вы не устанавливаете FK в переменной «s», например s.Fk1Id, так что поле будет null. Сначала получите экземпляр от EF:

var s = db.UserTasks.Where(o=>o.Id=="10027").First(); 

s.Id = 10027; 
s.Description ="test change"; 
s.Title = "Test change"; 
s.DueDate = DateTime.Now.AddHours(3); 
s.CreatedBy = db.Users.Where(c=>c.UserName=="Bob").First(); 
s.AssignedTo = db.Users.Where(c => c.UserName == "Stephen").First(); 
+0

ups !. Должно быть: db.UserTasks.Where (o => o.Id == 10027) .First(); – AiApaec

+0

Я не уверен, что вы имеете в виду. У меня нет свойства s.Fk1Id для этих объектов. Свойства fk задаются в db. CreatedBy, например, имеет правильный ключ в CreatedBy.Id. Разве ЭФ не должен его обнаруживать? – Tjaart

+0

Хорошо, это работает, но кажется, что должен быть лучший способ сделать это. db.Attach работает для всех полей, кроме полей внешнего ключа. Так что это не очень полезно. – Tjaart

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