Отношения между таблицами mvc3 - PullRequest
0 голосов
/ 03 сентября 2011

Я создаю сайт в MVC 3.

Сначала я использую код 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.

в моем классе Страниц у меня был этот код

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

Ошибка

Ссылка на объект не установлена ​​для экземпляра объекта.

Что я сделал не так?

1 Ответ

1 голос
/ 04 сентября 2011

Вы получите NRE на p.PageContent.Add(pageContent);, потому что коллекция не инициализирована.Инициализируйте коллекции внутри конструктора класса 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).

...