实体框架不会在编辑时保存子项

时间:2016-02-13 20:25:14

标签: asp.net-mvc entity-framework

我有一个控制器操作,可以在更改时将数据保存到db。模型包括子文件,但它们不会保存到数据库中。数据来自服务器,文件从请求ok添加到模型中,但它不会保存。没有错误发生。

这些是我的模特:

 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);
    }

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为您还必须为子实体设置状态,因为当您将实体附加到直接设置状态的上下文时,任何子实体都会处于“未更改”状态,因此在保存更改时会被忽略。

在这种情况下,您需要使用子文件的状态。

希望这有帮助!