MVC4对象未从上下文中完全检索

时间:2013-10-23 18:07:02

标签: entity-framework asp.net-mvc-4 edit dbcontext

我开发了一个画廊管理系统,没什么特别的,它有两个模型:

public class Category
{
    [Key]
    public int Id { get; set; }

    [Display(Name = "שם קטגוריה")]
    [Required(ErrorMessage="אנא הכנס שם קטגוריה", AllowEmptyStrings=false)]
    public string Name { get; set; }

    [Display(Name = "הצג")]
    [Required(ErrorMessage="אנא בחר האם להציג קטגוריה)")]
    public bool Display { get; set; }

    public List<Image> Images { get; set; }
}

public class Image
{
    [Key]
    public int Id { get; set; }

    [Display(Name="שם תמונה")]
    [Required(ErrorMessage="אנא בחר שם תמונה")]
    [MaxLength(50)]
    public string Name { get; set; }

    [Display(Name="נתיב קובץ")]
    [Required(ErrorMessage="אנא בחר נתיב לתמונה")]
    public string FilePath { get; set; }

    [Display(Name = "תיאור תמונה")]
    [MaxLength(150)]
    public string Description { get; set; }

    [Display(Name = "הצג")]
    [Required]
    public bool Display { get; set; }

    [Display(Name = "קטגוריות")]
    //[Required(ErrorMessage="אנא בחר קטגוריה")]
    public List<Category> Categories { get; set; }

    [Display(Name = "נתיב דף פייסבוק")]
    public string FacebookPage { get; set; }

}

现在为控制器:

    private CakesContext db = new CakesContext();

    public ActionResult EditImage(int id = 0)
    {
        Image image = db.Images.Find(id);
        if (image == null)
        {
            return HttpNotFound();
        }

        ViewBag.Categories = db.Categories.ToList();

        return View(image);
    }

    //
    // POST: /Categories/Edit/5

    [HttpPost]
    public ActionResult EditImage(Image image, FormCollection fc)
    {
        var categoriesString = string.IsNullOrEmpty( fc["categories"].ToString()) ? "" : fc["categories"].ToString();

        var chosenCategories = splitCategoriesString(categoriesString);
        if (chosenCategories == null || chosenCategories.Count == 0)
        {
            ModelState.AddModelError("עליך לבחור לפחות קטגוריה אחת", new Exception());
        }

        ModelState.Remove("Categories");

        if (ModelState.IsValid)
        {
            image.Categories = chosenCategories;
            db.Entry(image).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("ImageList");
        }
        return View(image);
    }

在我SaveChanges之前,我调试了图像中包含的所有数据,包括所选择的类别(由于这个原因,我排除了视图,它一直到此为止)。

现在奇怪的是,当我检查表中的数据时,我得到了一个CategoryImages表,其中只包含两个外键:categoryIdimageId,但是当我尝试检索数据我得到图像对象,其中Categories属性设置为null,任何想法为什么?

从数据库中提取数据的代码很简单:

var images= db.Images.ToList();

1 个答案:

答案 0 :(得分:2)

导航属性必须为virtualICollection,请尝试

public virtual ICollection<Category> Categories { get; set; }
public virtual ICollection<Category> Categories { get; set; }

请参阅Relationships and Navigation Properties