ASP.NET MVC3 - ошибка «Ссылка на объект не установлена ​​на экземпляр объекта» - PullRequest
3 голосов
/ 05 января 2012

Я относительно новичок в .NET и MVC3.У меня возникли проблемы с приведенным выше сообщением об ошибке при попытке добавить экземпляр объекта.Ниже мой код:

Класс KeyDate

public class KeyDate
{
    [Key]
    public int KeyID { get; set; }

    [StringLength(1000), Required]
    public string Title { get; set; }

    [Required]
    public string Description { get; set; }

    [Required]
    [Display(Name = "Event Date")]
    public DateTime EventDate { get; set; }

    [Display(Name = "Event End Date")]
    public DateTime? EventEndDate { get; set; }

    [Display(Name = "Course ID")]
    public int? CourseID { get; set; }

    [Display(Name = "Event ID")]
    public int? EventID { get; set; }

    public DateTime Created { get; set; }

    [Display(Name = "Created By")]
    public string CreatedBy { get; set; }

    public DateTime? Deleted { get; set; }

    [Display(Name = "Deleted By")]
    public string DeletedBy { get; set; }

    public virtual ICollection<Association> Associations { get; set; }
}

Класс ассоциации

public class Association
{
    [Key, ForeignKey("KeyDate")]
    [Column(Order = 1)]
    public int KeyID { get; set; }

    [Key, ForeignKey("Category")]
    [Column(Order = 2)]
    public int CategoryID { get; set; }

    public virtual KeyDate KeyDate { get; set; }
    public virtual Category Category { get; set; }
}

Я получаю сообщение об ошибке в моем контроллере, опубликованном ниже

    [HttpPost]
    public ActionResult Create(KeyDate keyDate, int topic)
    {
        keyDate.Created = DateTime.Now;
        keyDate.CreatedBy = User.Identity.Name;

        // Create topic association
        Association keyDateTopic = new Association();
        keyDateTopic.CategoryID = topic;
        keyDate.Associations.Add(keyDateTopic); // <-- Object reference... error here

        repository.Add(keyDate);
        repository.Save();

        return RedirectToAction("Index");
    }

Я гуглял это целую вечность и следовал примеру ScottGu «Сначала код с существующей базой данных», в котором код очень похож, но мне не повезло.Любая помощь приветствуется.Спасибо.

Ответы [ 4 ]

3 голосов
/ 05 января 2012

Associations - ноль. Он не был инициализирован.

Добавьте конструктор для KeyDate и инициализируйте его там:

public KeyDate()
{
     Associations = new List<Association>();
}
3 голосов
/ 05 января 2012

Ваш список ассоциаций должен быть создан перед добавлением в него элементов.

Рекомендуется делать это из конструктора.

public class KeyDate
{
...
    public virtual ICollection<Association> Associations { get; set; }
    public KeyDate()
    {
       Associations = new List<Association>()
    }
}
1 голос
/ 05 января 2012

Описание

Похоже, keyDate.Associations равно нулю

У вас есть несколько способов решить эту проблему

Образец

  • Создайте ICollection в своем ActionMethod.

    [HttpPost]
    public ActionResult Create(KeyDate keyDate, int topic)
    {
        keyDate.Created = DateTime.Now;
        keyDate.CreatedBy = User.Identity.Name;
    
        // Create topic association
        Association keyDateTopic = new Association();
        keyDateTopic.CategoryID = topic;
    
        // create this list
        keyDate.Associations = new List<Association>();
    
        keyDate.Associations.Add(keyDateTopic); // <-- Object reference... error here
    
        repository.Add(keyDate);
        repository.Save();
    
        return RedirectToAction("Index");
    }
    
  • ИЛИ Добавьте конструктор в свой класс KeyDate, например,

    public class KeyDate
    {
        public KeyDate()
        {
            // create this list
            this.Associations = new List<Association>();
        }
    
        [Key]
        public int KeyID { get; set; }
    
        [StringLength(1000), Required]
        public string Title { get; set; }
    
        [Required]
        public string Description { get; set; }
    
        [Required]
        [Display(Name = "Event Date")]
        public DateTime EventDate { get; set; }
    
        [Display(Name = "Event End Date")]
        public DateTime? EventEndDate { get; set; }
    
        [Display(Name = "Course ID")]
        public int? CourseID { get; set; }
    
        [Display(Name = "Event ID")]
        public int? EventID { get; set; }
    
        public DateTime Created { get; set; }
    
        [Display(Name = "Created By")]
        public string CreatedBy { get; set; }
    
        public DateTime? Deleted { get; set; }
    
        [Display(Name = "Deleted By")]
        public string DeletedBy { get; set; }
    
        public virtual ICollection<Association> Associations { get; set; }
    }
    
1 голос
/ 05 января 2012

Похоже, keyDate.Associations это ноль.

Изменение

keyDate.Associations.Add(keyDateTopic);

до

if ( keyDate.Associations == null)
{
   keyDate.Associations = new Collection<Association>();
}

keyDate.Associations.Add(keyDateTopic);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...