2016-11-15 9 views
0

При отправке формы и ее передаче в моей модели (Forms) Я пытаюсь сохранить изменения в моей БД.Entity Framework - сохранение изменений в db не работает

Модель формы имеет объект PeopleInvolved как собственность.

Модель успешно обновлена, изменения также успешно добавляются в объект peopleInvolved, однако вызов SaveChanges() ничего не сохраняет.

.NET Framework 4.5.1 - EF 6.1.1

public class Forms 
{ 
     public int Id { get; set; } 
     public string UserId { get; set; } 
     public PeopleInvolved PeopleInvolved { get; set; }  
} 

public async Task<ActionResult> EditForm(Forms model, string returnUrl) 
{ 
    ViewData["ReturnUrl"] = returnUrl; 
    ApplicationUser user = await GetCurrentUserAsync(); 

    if (!ModelState.IsValid) 
     return RedirectToAction("Index", model); 

    if (model.PeopleInvolved != null) 
    { 
     PeopleInvolved peopleInvolved = _db.PeopleInvolved.Single(x => x.FormId == user.FormId); 
     peopleInvolved = model.PeopleInvolved; 

     _db.SaveChanges(); 

     return RedirectToLocal(returnUrl + "?PeopleInvolved?Success"); 
    } 
} 
+0

Вы пытаетесь добавить или обновить? – Miguel

+0

Я пытаюсь обновить - в идеале без необходимости вручную назначать каждое свойство соответствующему свойству модели. –

ответ

0

Вы можете обновить это. Если вам нужно переопределить model.PeopleInvolved.FormId с user.FormId, обновите это свойство.

db.PeopleInvolved.Attach(model.PeopleInvolved); 
db.Entry(model.PeopleInvolved)).State = System.Data.Entity.EntityState.Modified;  
db.SaveChanges(); 
+0

Удивительный, работает шарм - я уже пробовал это, но ** ПОСЛЕ ** Я получил строку, поэтому получал дублирующий первичный ключ. Спасибо: D –

1

Вы не реально изменить что-либо из базы данных.

Ваш вызов в базу данных возвратил объект PeopleInvolved и сохранил ссылку на него в переменной peopleInvolved. Затем вы изменяете эту переменную как ссылку на свойство PeopleInvolved на объект модели. Вы никогда не меняете объект, возвращенный из вызова базы данных.

Simplistic решение сделать что-то вроде

peopleInvolved.Property1 = model.PeopleInvolved.Property1; 
peopleInvolved.Property2 = model.PeopleInvolved.Property2; 

обновить реальный объект, который был возвращен из базы данных.

+0

ARGH вы абсолютно правы! Я пытался обойти назначение каждого свойства по отдельности. Спасибо! –

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

  • Нет связанных вопросов^_^