Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

[Exam Problem] BugTracker - некоректно връщане на данни от базата при тестинг

Здравейте, колеги,

Тази вечер изпитът ми скъса нервите и ще съм много благодарен, ако някой успее да ми посочи грешката. Това е решението ми на BugTracker изпита:

https://github.com/HPenchev/SoftUni-Projects/tree/master/WebServicesAndClound/BugTracker

 

https://github.com/HPenchev/SoftUni-Projects/blob/master/WebServicesAndClound/BugTracker/BugTracker.Tests/BugsTests.csНа тестовете ми гърми на 89 ред.

Поради някаква причина не ми връща коментарите, като дръпна бъга. Въпросът е, че изобщо не ги тегли от базата. Тук можете да ми видите бъг контролера:

https://github.com/HPenchev/SoftUni-Projects/blob/master/WebServicesAndClound/BugTracker/BugTracker.RestServices/Controllers/BugsController.cs

Там ще видите и метода GetBugById

Както виждате, с цел дебъгване на 77-79 ред съм напраскал някакви променливи. Веднъж дърпам коментарите през репозиторито, веднъж директно през базата. Обикновено и на двете места ми дава нула коментара в повечето случаи. Променливата bug също има нула коментара. Един-два пъти ми даде, че има коментари само в някоя от променливите, не знам как стана.  А тъпото е, че като отворя базата през Мениджмънт студио, коментарите и бъгът са си там, Но на кода не му дреме явно! Не мога да разбера къде бъркам. Коментарите са си в базата, тоест явно са постнати коректно. Това, че понякога ми даде различни резултати, ме кара да мисля в посока нишки, но там не съм наясно как работят нещата. Дали някой ще успее да помогне? Благодаря предварително!

 

Edit: Малко ще опростя въпроса си - не само през тестинга, опитах и ръчно да напълня базата и като пусна метода GetBugId не ми връща коментарите. Не мога да разбера защо, явно нещо бъркам. 

0
C# Web Services & Cloud 11/09/2015 09:00:43
krasimalakov avatar krasimalakov 19 Точки

Колекцията от в class Bug

public ICollection<Comment> Comments

трябва да е virtual

public virtual ICollection<Comment> Comments.

същото се отнася и за Bug в class Comments.

Аз съм решил задачата по следния начин:

в CommentsController.cs

 // GET api/bugs/{id}/comments
        [HttpGet]
        [Route("api/bugs/{id}/comments")]
        public IHttpActionResult GetAllCommentsForBug(int id)
        {
            var bug = this.Data.Bugs.Find(id);
            if (bug == null)
            {
                return this.NotFound();
            }
            var comments = this.Data.Comments
                .Where(c => c.BugId == bug.Id)
                .OrderByDescending(c => c.DateCreated)
                .Select(c => new CommentsForBugViewModel
                {
                    Id = c.Id,
                    Text = c.Text,
                    Author = c.Author == null ? null : c.Author.UserName,
                    DateCreated = c.DateCreated
                });
            return this.Ok(comments);
        }

1
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Благодаря ти много! Знам по принцип, че трябва да са виртуални, но някак си съм го пропуснал. И изобщо не ми хрумна да търся причината там, ровех из базата, из сървисите. Не съм сигурен какво точно прави виртуалното пропърти, освен, че зарежда информация, само когато е необходима. Защо точно се получава този ефект?

0
krasimalakov avatar krasimalakov 19 Точки

Подробности за ефектите на виртуалното пропърти има на този линк:

http://stackoverflow.com/questions/5597760/what-effects-can-the-virtual-keyword-have-in-entity-framework-4-1-poco-code-fi

Успех на изпита!

 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.