Entity Framework, problem z przekazaniem do widoku

0

Witajcie. Mam takie 2 klasy:

public    class Walor
    {
        [Key]
        public int WalorID { get; set; }
        public string Nazwa { get; set; }
        public List<Notowanie> Notowania { get; set; }
    }

 public  class Notowanie
    {
        [Key]
        public int NotowanieID { get; set; }
        public string DataNotowania { get; set; }
        public decimal KursOtwarcia { get; set; }
        public decimal KursMin { get; set; }
        public decimal KursMax { get; set; }

Dodalem do bazy danych (poprzez context.walory.add() ) 2 obiekty Walor, w kazdym z nich zainicjalizowalem do listy Notowania po 4 obiekty Notowanie. Wszystko sie ladnie dodało do bazy, do tabeli Notowanie utworzyl sie klucz obcy, na moje oko jest wszystko ok. Czyli mam w bazie 2 wiersze w tabeli Walors i 8 wierszów w tabeli Notowanies.
Utworzylem repozytorium:

public  class EFWalorRepository : IWalorRepository
    {
        private EFContext context = new EFContext();
        public IEnumerable<Walor> Walory
        {
            get { return context.Walory; }
        }

które wstrzykuje do kontrolera i przekazuje do widoku:

public class WalorController : Controller
    {   private IWalorRepository repository;
        public WalorController(IWalorRepository repository)
        {
            this.repository = repository;
        }

        public ViewResult List()
        {
            return View(repository.Walory);
        }
    }

a oto mój widok:

@using Domain.Entities
@model IEnumerable< Domain.Entities.Walor>

@foreach (var walor in Model)
{
    <div>
        <h3>@walor.Nazwa</h3>
        @foreach (var noto in walor.Notowania)
        {
            <h3>Data notowania @noto.DataNotowania</h3>
            <h1>Kurs max @noto.KursMax</h1>
            <h1>Kurs min @noto.KursMin</h1>
        }
    </div>
}

Mam problem w linii:

@foreach (var noto in walor.Notowania)

wywala blad: Object reference not set to an instance of an object.

Pogrzebalem debuggerem i okazalo sie ze otrzymuje z kontrolera 8 walor'ów, zamiast oczekiwanych 2. W kazdym walorze lista Notowania jest null'em.
Proszę naprowadzcie mnie na wlasciwy trop bo juz trzecia godzine sie z tym mecze :(

2

Lista jest nullem, bo nie masz lazy-loadingu i pewnie nie ładujesz też jej ręcznie poprzez wywołanie Include().

I nie przekazuj repozytorium do widoku...

0

Ok, dodalem tego Include'a i działa. Dzięki.
A co jest złego w przekazywaniu repo do widoku?

1

Po pierwsze, to nie jest nawet repozytorium.
Po drugie, właściwość w repozytorium? WTF?
Po trzecie, tak z grubsza ideą repozytorium jest posiadanie warstw w projekcie, co to za warstwy, gdy logika biznesowa i dostęp do danych, są wymieszane z widokiem?

A tak poza tym:
http://commitandrun.pl/2016/05/11/Repozytorium_najbardziej_niepotrzebny_wzorzec_projektowy/
http://commitandrun.pl/2016/05/30/Brutalne_prawdy_o_MVC/

0
somekind napisał(a):

Po pierwsze, to nie jest nawet repozytorium.
Po drugie, właściwość w repozytorium? WTF?
Po trzecie, tak z grubsza ideą repozytorium jest posiadanie warstw w projekcie, co to za warstwy, gdy logika biznesowa i dostęp do danych, są wymieszane z widokiem?

A tak poza tym:
http://commitandrun.pl/2016/05/11/Repozytorium_najbardziej_niepotrzebny_wzorzec_projektowy/
http://commitandrun.pl/2016/05/30/Brutalne_prawdy_o_MVC/

Próbuję zrozumieć jak to MVC powinno wyglądać naprawdę. Masz może jakiś jeden tutorial z prostym przykładem jak powinno się takie coś tworzyć?

0

Prosty tutorial:
Kontroler - nic poza uwierzytelnieniem, autoryzacją i walidacją viewmodelu, wywołaniem serwisu, odebraniem wyniku i przekierowaniem na odpowiedni widok.
"Serwis" - robi coś w sposób zależny od skali projektu. Może bezpośrednio zrealizować jakiś kawałek logiki biznesowej/crudowej operując bezpośrednio na obiekcie ORMa; może agregować wywołania do różnych serwisów biznesowych, zebrać ich wyniki i odesłać do kontrolera; może też przykrywać pełną maszynerię DDD. Grunt żeby nie było przegięciem w żadną stronę. Ważne, że z punktu widzenia MVC ten serwis jest częścią Modelu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1