0

私はギャラリー管理システムを開発しましたが、派手なものではなく、2 つのモデルがあります。

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(その理由でビューを除外しましたが、この時点までは機能していました)。

奇妙なことに、データがあるテーブルをチェックすると、 とのCategoryImages2 つの外部キーのみを含むテーブルが得られましたが、データを取得しようとすると、Categories プロパティが null に設定された画像オブジェクトが取得されます。なぜだと思いますか?categoryIdimageId

DB からデータを取得するためのコードは次のように単純です。

var images= db.Images.ToList();
4

1 に答える 1

2

ナビゲーション プロパティは である必要がありますvirtualICollection試してみてください

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

リレーションシップとナビゲーション プロパティを参照してください

于 2013-10-23T19:53:18.037 に答える