Comment initialiser mon Modèle [dupliquer]
-
21-12-2019 - |
Question
Tout d'abord, je voudrais vous montrer mon modèle.
public class Blog
{
[Key]
public int BlogID { get; set; }
public System.Nullable <DateTime> LastModified { get; set; }
public System.Nullable<int> AidID { get; set; }
public virtual BlogAid BlogAid{ get; set; }
public System.Nullable<int> AuthorID { get; set; }
public virtual BlogAuthor BlogAuthor { get; set; }
public System.Nullable<int> CommentID { get; set; }
public virtual ICollection<BlogComment> BlogComment { get; set; }
public System.Nullable<int> TitleID { get; set; }
public virtual BlogTitle BlogTitle { get; set; }
public System.Nullable<int> ContentID { get; set; }
public virtual BlogContent BlogContent { get; set; }
public System.Nullable<int> NewsID { get; set; }
public virtual BlogNews BlogNews { get; set; }
}
Surtout pour cette ligne:
public virtual ICollection<BlogComment> BlogComment { get; set; }
Cela signifie que j'ai 1 à plusieurs relations entre le blog et les commentaires, puis voir mon contrôleur:
var comments = from c in DB.BlogCommenttbl
join b in DB.Blogtbl on c.BlogID equals b.BlogID
where c.CommentID > 0
select new
{ Comments = c.Comments, LastModified=c.LastModifed};
if (comments.FirstOrDefault() !=null)
{
bpm.Blogs.BlogComment = new List<BlogComment>();
foreach (var item in comments.ToList())
{
bpm.Blogs.BlogComment.Add(new BlogComment{Comments=item.Comments, LastModifed=item.LastModified});
}
}
et la vue est
@foreach (var item in Model.Blogs.BlogComment)
{
<h3>Start Bootstrap <small>@Html.DisplayText(item.LastModifed.ToString())</small></h3>
<p>@Html.DisplayText(item.Comments.ToString())</p>
}
mais je l'ai eu Object reference not set to an instance of an object.
erreur.
Ensuite, j'ai débogué le code et a constaté que
bpm.Blogs.BlogComment = new List<BlogComment>();
ne peut pas fonctionner, comment puis-je corriger ce bug?Ou de traiter de ce problème?
La solution
Probablement, vous n'avez pas l'initialiser bpm.Blogs
de la propriété.Avant la ligne bpm.Blogs.BlogComment = new List<BlogComment>();
vous devez initialiser Blogs
:
bpm.Blogs = new Blog();
Autres conseils
if (comments.FirstOrDefault() !=null)
{
bpm.Blogs.BlogComment = new List<BlogComment>();
foreach (var item in comments.ToList())
{
bpm.Blogs.BlogComment.Add(new BlogComment{Comments=item.Comments, LastModifed=item.LastModified});
}
}
Si commentaires ne contient pas tous les éléments du bloc de code ne sera pas exécuté.Si elle n'est pas exécutée, le bpm.Blogs.BlogComment ne sera pas instancié.Le changer en:
bpm.Blogs.BlogComment = new List<BlogComment>();
if (comments.FirstOrDefault() !=null)
{
foreach (var item in comments.ToList())
{
bpm.Blogs.BlogComment.Add(new BlogComment{Comments=item.Comments, LastModifed=item.LastModified});
}
}