0

私はMVC3でウェブサイトを構築しています。

私は既存のデータベースで最初にEFコードを使用しています。

モデル内の私のETは次のようになります。

 public class Pages
{
    [Required]
    public int ID { get; set; }

    public int ParentID { get; set; }

    [Required]
    public int PageType { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [DisplayName("כותרת")]
    public string Title { get; set; }

    public string SearchWords { get; set; }

    public string Leng { get; set; }

    public int? Sort { get; set; }

    public string Modules { get; set; }

    [ForeignKey("PageType")]
    public virtual PagesType Type { get; set; }

    public virtual IEnumerable<PagesType> Types { get; set; }

    [ForeignKey("PageID")]
    public ICollection<PageContent> PageContent { get; set; }

    [ForeignKey("PageID")]
    public virtual ICollection<ImagesTable> Images { get; set; }


}

public class PageContent
{
    public int ID { get; set; }

    public int PageID { get; set; }

    public string Header { get; set; }

    public string Text { get; set; }

    [ForeignKey("ID")]
    public virtual ICollection<Pages> Pages { get; set; }

}

私の最初のテーブルでわかるように、コールドページはPageContentという名前の別のテーブルと関係があります。

私のPagesクラスで私はこのコードを持っていました

[ForeignKey("PageID")]
    public ICollection<PageContent> PageContent { get; set; }

新しいpageContentを新しいページに追加しようとすると、エラーが発生します。

このコードを参照してください

public ActionResult AddPage(PageModel page)
    {
        SystemLogic cmd = new SystemLogic();

        page.Leng = "he";
        Models.Pages p = new Pages();

        p.ParentID = page.ParentID;
        PageContent pageContent = new PageContent();
        pageContent.Text = page.Content;

        p.PageContent.Add(pageContent);

エラーは

オブジェクト参照がオブジェクト インスタンスに設定されていません。

私が間違ったことは何ですか?

4

1 に答える 1

1

p.PageContent.Add(pageContent);コレクションが初期化されていないため、でNREを取得します。Pagesクラスのコンストラクター内でコレクションを初期化します。

public class Pages
{
    public Pages()
    {
        PageContent = List<PageContent>();
        Images = List<ImagesTable>();
    }

    [Required]
    public int ID { get; set; }

    public int ParentID { get; set; }

    [Required]
    public int PageType { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [DisplayName("כותרת")]
    public string Title { get; set; }

    public string SearchWords { get; set; }

    public string Leng { get; set; }

    public int? Sort { get; set; }

    public string Modules { get; set; }

    [ForeignKey("PageType")]
    public virtual PagesType Type { get; set; }

    public virtual IEnumerable<PagesType> Types { get; set; }

    [ForeignKey("PageID")]
    public ICollection<PageContent> PageContent { get; set; }

    [ForeignKey("PageID")]
    public virtual ICollection<ImagesTable> Images { get; set; }
}

または、コレクションにオブジェクトを追加する前

if (p.PageContent == null) p.PageContent = new List<PageContent>();

p.PageContent.Add(pageContent);

適切な命名規則の使用を検討する必要があります(たとえばPage、の代わりにPages)。

于 2011-09-04T00:41:40.623 に答える