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
表,其中只包含两个外键:categoryId
和imageId
,但是当我尝试检索数据我得到图像对象,其中Categories属性设置为null,任何想法为什么?
从数据库中提取数据的代码很简单:
var images= db.Images.ToList();
答案 0 :(得分:2)
导航属性必须为virtual
和ICollection
,请尝试
public virtual ICollection<Category> Categories { get; set; }
public virtual ICollection<Category> Categories { get; set; }