Как добавить коллекции моделей в модель?(ASP.NET MVC3 с Entity Framework) - PullRequest
2 голосов
/ 10 июля 2011

Я создаю сайт ASP.NET MVC 3 с использованием подхода Entity Framework 4, основанного на коде. В моей модели есть один объект Problem, который содержит дочернюю коллекцию другого объекта модели, ProblemRating. В настоящее время у меня есть Модель проблемы, настроенная следующим образом:

public class ProblemModel
{
    [Key]
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ProblemId { get; set; }

    [Display(Name = "Creator")]
    [Required]
    public string UserName { get; set; }

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

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

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

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

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

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

    public virtual IEnumerable<ProblemRatingModel> Ratings { get; set; }

    public DateTime CreatedDate { get; set; }

    public DateTime LastModifiedDate { get; set; }
}

Класс ProblemRating довольно прост:

public class ProblemRatingModel
{
    [ForeignKey("AssociatedProblem")]
    public int AssociatedProblemId { get; set; }
    public ProblemModel AssociatedProblem { get; set; }
    public string UserName { get; set; }
    public decimal Rating { get; set; }
}

Стандартный код в методе Create контроллера не сообщает о допустимой модели, когда я заполняю поля и нажимаю «Create»:

if (ModelState.IsValid)
{
    db.ProblemModels.Add(problemmodel);
    db.SaveChanges();
    return RedirectToAction("Index");  
}

return View(problemmodel);

Как правильно обрабатывать дочерние коллекции модели внутри другого модельного класса? Я не уверен на 100% в использовании атрибута ForeignKey, правильно ли я его использую?

Спасибо!

1 Ответ

1 голос
/ 10 июля 2011

Измените ваш класс ProblemModel следующим образом

public class Problem //Renamed to Problem
{
    ...

    public virtual ICollection<ProblemRating> Ratings { get; set; }

    ...
}

... и в вашем классе ProblemRating выполните следующие действия:

public class ProblemRating // Renamed to ProblemRating
{
    public int Id { get; set; } 
    public int ProblemId { get; set; }
    public string UserName { get; set; }
    public decimal Rating { get; set; }

    public virtual Problem Problem { get; set; }

}

Сначала будет работать мастер кода EF (предположения удобного именования)сделайте все остальное за вас.

Проверьте это http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

Вы также можете удалить ключевые атрибуты в столбце «Идентификатор проблемы»

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