У меня есть действие контроллера, которое сохраняет данные в db при изменении. Модель включает в себя дочерние файлы, однако они не сохраняются в базе данных. Данные поступают нормально с сервера, файл добавляется в модель из запроса ok, но он просто не будет сохранен. Происходит ошибка.Entity Framework не сохраняет детей при редактировании
Это мои модели:
public class Guest
{
public Guest()
{
this.Files = new List<File>();
}
public int Id { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public string Email { get; set; }
public string Tel { get; set; }
public int CompanyId { get; set; }
public int Votes { get; set; }
public virtual ICollection<File> Files {get; set;}
}
Это мой VM
public class GuestViewModel
{
public Guest Guest { get; set; }
public IEnumerable<SelectListItem> Companies { get; set; }
}
и это контроллер
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(GuestViewModel guestViewModel, HttpPostedFileBase upload)
{
if (upload != null && upload.ContentLength > 0)
{
var avatar = new File
{
FileName = System.IO.Path.GetFileName(upload.FileName),
FileType = FileType.Picture,
ContentType = upload.ContentType
};
using (var reader = new System.IO.BinaryReader(upload.InputStream))
{
avatar.Content = reader.ReadBytes(upload.ContentLength);
}
guestViewModel.Guest.Files = new List<File> { avatar };
}
if (ModelState.IsValid)
{
Guest guest = new Guest();
guest = guestViewModel.Guest;
_db.Entry(guest).State = EntityState.Modified;
_db.SaveChanges();
return RedirectToAction("Index");
}
return View(guestViewModel);
}
Любая помощь приветствуется.
Привет, да. Это помогает, если я укажу '_db.Entry (guest) .State = EntityState.Modified;' сразу после того, как я добавил файл для моделирования, он сохраняется. Однако, если я хочу изменить текущий файл и назначить EntityState.Modified, это приведет к ошибке на '_db.SaveChanges();' заявив, что я изменил (0) строки. Вы знаете, как это преодолеть? –