Помощ за Entity Framework Exercise - Print all comments by given user
Здравейте, колеги, може ли някой да ми покаже правилното решение на задачата, защото с написания от мен код не се получава:
http://pastebin.com/2VEMa4HB
Здравейте, колеги, може ли някой да ми покаже правилното решение на задачата, защото с написания от мен код не се получава:
http://pastebin.com/2VEMa4HB
Какво точно е заданието на задачата? Да изпринтираш коментарите на юзър, който идва от конзолата, така ли? Какво на тези коментари? Виждам, че принтираш цял обект, което ме навежда на мисълта, че вероятно на конзолата излиза нещо от сорта на Data.Entity.Comment. Да не би да трябва да излезе нещо на този коментар? Например текст на коментара (c.Body примерно).
Логически ми изглежда вярна задача. Практически ми се струва изпълнена грешно обаче. В обектния модел на приложението имаш две основни единици. Потребители и коментари.
Един коментар може да бъде написан само от един потребител (например този пост, който четеш във форума е написан единствено и само от мен). Докато един потребител може да има множество коментари (например освен този пост, вчера написах още няколко). За да си го представим в смисъла на обекти, вероятно това означава, че класът Коментар има пропърти от тип Потребител. А класът потребител има пропърти от тип Колекция<Потребител>.
Като знаем това, единственото което в момента ни интересува е да намерим желаният потребител от базата данни. В момента, в който го намерим и получим обект от клас Потребител, това което трябва да направим е просто да вземем неговата колекция с коментари.
1. Взимане на желаният потребител от базата:
string givenUserName = Console.ReadLine();
User desiredUserFromDB = blogDBContext.Users.FirstOrDefault(user => user.UserName == givenUserName);
Какво казваме тук: Дай ми първият потребител от DbSet-а от потребители, който отговаря на условието UserName пропъртито му да е равно на променливата givenUserName (това, което потребителят е въвел в конзолата)
2. Взимане на списъка с коментари на потребителя:
List<Comment> comments = desiredUserFromDB.Comments.ToList();
3. Проверяваме дали не е празна колекцията, за да изпринтираме "None"
if(comments.Count == 0)
{
Console.WriteLine("None");
}
4. В противен случай ги обикаляме и изпринтираме нещо за тези коментари (вероятно не целият обект както казахме, тъй като това просто ще изпринтира типа на обекта)
else
{
foreach (Comment comment in comments)
{
Console.WriteLine(comment.Body);
}
}
Този FirstOrDefault прави нещо като твоят първи forech върху потребителите. Само че от там нататък няма смисъл да се обикалят всички коментари в базата и да се вземат тези, които отговарят на този потребител, тъй като потребителят сам по себе си държи в себе си колекцията от коментари, които той е написал. Общо взето това е промяната (иначе и двете резултират до едно и също нещо).
Благодаря за изчерпателното обяснение и решение на задачата.