Global Azure Bootcamp we Wrocławiu!

 

Witajcie,

zapraszamy na trzeci odcinek codingtv();!

Dzisiaj omawiamy założenia podejścia CodeFirst w Entity Framework oraz na podstawie stworzonego modelu generujemy bazę danych.

Tak jak poprzednio, trzeci odcinek został podzielony na dwie części.

Zapraszamy do oglądania i czekamy na Wasze komentarze!

Linki do wykorzystywanych pojęć:

25 komentarzy

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

  • Jak stworzycie nową klasę za pomocą ReSharper’a (Alt+Enter na definicji nie istniejącej klasy) to w taki sam sposób można ją przenieść do nowego pliku (na nowo utworzonej klasie wciskamy alt+enter i wybieramy opcję przeniesienia do nowego pliku 😉

    • Zgadza się – podobnie zadziała Ctrl+Shift+R i wybór „Move To Another File” lub od razu Ctrl+R+O.

      Za każdym razem chcemy pokazać parę nowych skrótów, a ten czekał na inny odcinek 🙂

      Co do czcionki – słuszna uwaga, poprawimy!

  • Jak zmienie coś w którejś z klas, np user (dodam jakieś property, albo zmienie nazwe czegoś), będę musiał wywalić starą bazę danych, czy entity to jakoś „przearanżuje” ?

    • Cześć,
      Na początek ochy i achy – chłopaki świetna robota 🙂

      W dalszej części pytania.

      1)Czy za każdą przebudową bazy on ją sobie wywala i Tworzy nową? A co z danymi. Bo jak mam już np projekt na serwerze i go rozbudowuje to wyrzuci mi wprowadzone dane i będę musiał zaczynać od nowa?

      2) Czy jest jakaś możliwość aby taki automat tworzył mi osobne bazy dla różnych użytkowników – tworzenie platformy gdzie zakładane są różne blogi poprzez założenie konta i tutaj każdy blogger ma swoją bazę, czy jednak tutaj lepsze jest standardowe podejście i tworzenie bazy poprzez uruchomienie skryptu ją tworzącego (np procedury składowej zapisanej w bazie, która tworzy mi nową bazę). Pytam bo podejrzewam że macie większe doświadczenie w tego typu realizacjach.

      3) I jeszcze jedno, może trochę wybiegające w przód. Czy macie jakiś patent gdzie przechowywać użytkowników i jak ich logować do systemu, gdy np. mamy wiele baz danych i wielu użytkowników może korzystać z jednej bazy, a także po zalogowaniu mają dostęp tylko do tej jednej konkretnej bazy. W jaki sposób tworzyć loginy, żeby były unikalne w obrębie jednej bazy danych, a zarazem mogły się powtarzać w różnych bazach np. mój login to yaso. Ale chce się zalogować do konkretnej bazy danych i w jaki sposób wybrać bazę która należy do mnie, a nie innego yaso który ma swój login w innej bazie. (Chodzi mi o projekt jednego systemu który mógłby być w taki sposób rozdzielony).

      Pozdrawiam
      YASO

    • dwie opcje, albo usuwasz baze i regeneruje Ci sie od nowa (tracisz dane – w razie czego sam musisz sobie je przeniesc), lub zachowujesz dane i sam zmieniasz schemat bazy danych (o ile zmiana pozwala zachowac dane 😉

  • Czyli to rozwiązanie jest dobre na początku tworzenia, później już odrębnie rozwój bazy i systemu. A ktoś coś wie na temat pozostałych punktów? Próbuje stworzy taki system wieloużytkownikowy wiem że jeśli się uda to wpisów może być dużo no i każda grupa użytkowników np 5, może mieć dostęp tylko do swoich danych i żadnych innych

  • Ja to bym proponował jeszcze pokazać jak korzystać z MSSQL Server Compact.

    PS (wybaczcie, nie mogę się powstrzymać :P) Któryś z was powiedział że ta klawiatura jest dziwna. Mam taką samą, nie jest :P. Powiem nawet, że lepsza od wszystkich na jakich pracowałem :).

  • widzę że technicznie z odcinka na odcinek jest coraz lepiej 🙂 to bardzo cieszy. Mam natomiast (a co, musze marudzić, ktoś musi) uwagę abyśnie nie promowali metodologii Code First. To jest zło. Takie podejście powoduje, że można stworzyć bardzo nieoptymalną bazę. Podejście to zwalnia z myślenia o bazie co lubi się mścić gdy projekt zaczyna być używany komercyjnie. Uczcie proszę dobrych nawyków bo rozumiem, że taki jest cel Waszego przedsięwzięcia. Code First jest dobre dla szybkiego prototypowania i dla osób mających bardzo solidne podstawy i szerokie doświadczenie z zakresu baz danych. Początkujących może łatwo sprowadzić na złą drogę. To tak jak z programowaniem obiektowym w delphi, teoretycznei się da ale początkujący nigdy nie nauczy się tam op.

  • Od pierwszego odcina nurtuje mnie jakie zalety ma rozdzielenie określonych warstw w waszym Solution na odrębne projekty?
    Oddzielny projekt na unit testy ? ok ma sens, bo tego nie będziemy publikować.
    Oddzielny projekt na generator RSSa, jakiś elastyczny WebService – jednym słowiem cokolwiek co by było ‚reusable’ – zgadzam się w 100% – ale wydzielenie warstw logiki biznesowej i modelu? Nigdy tego nie robiłem i nie wiem czy błądzę 🙂

    • logika biznesowa ma to do siebie że lubi się zmieniać i to dość szybko, więc dobrze ją wywalić do osobnego assembly, żeby łatwiej podmienić na nową. Tutaj raczej nie będzie się zmieniać więc wydaje mi się, że takie podejście jest wynikiem przyzwyczajeń i praktyki codzinnej niż konkretnego wymagania tego projektu

    • Moje pytanie dotyczy właśnie tego zagadnienia z perspektywy praktyki codziennej właśnie bo w czym łatwiejsze jest podmienienie assembly z odrębnego projektu? Dla mnie wrzucenie dllki to wrzucenie dllki 🙂
      Wydzielanie do odrębnego projektu kodu, który jest integralną częścią innego projektu w większości przypadków wydaje mi się zbędne. Ma to sens jeśli kilka zespołów pisze jedną aplikację w modelu BlackBox – dostają wytyczne co metody mają przyjmować co zwracać i tyle – o resztę się martwi architekt/integrator …

      Czyli nie będę w ogromnym błędzie jeśli uznam, że to głównie kwestia gustu i przyzwyczajeń? 🙂 bo szczególnie w MVC dość rozsądny podział narzuca sama koncepcja tego frameworka 🙂

    • z mojego (kilkunastoletniego) doświadczenia podział raczej wynika z rozsądku. Jeżeli robię mały projekt który raczej nie będzie niewiadomo jak rozwijany to nie ma sensu dzielić na biblioteki, uzywać niewiadomo czego, czy podniecać się tak modnym ostatnio DI. Jeżeli natomiast pracuje nad większym projektem który dość intensywnie się zmienia to w takiej sytuacji dobry podział projektu to podstawa a DI to zbawienie.

      Ogólnie ujmując wydaje się, że im częściej projekt się musi zmieniać tym większy presja aby projekt był porządnie podzielony na logiczne części. Wówczas łatwiej wprowadzać nawet kolosalne zmiany 🙂

  • Witam,
    podejście CodeFirst wg mnie bardzo nieprzyjazne skoro zmiana w klasie (mającej odzwierciedlenie w bazie) wymazuje dotychczasowe dane w bazie. Może to zmienicie?
    Poza tym trochę mało treści w odc. 3. Myślałem, że będzie więcej kodowania, zrobimy większy krok w projekcie – ale wpływ na to może mieć to, że ciekawie się Was ogląda i człowiek chce więcej:)
    Czekam na odc. 4.
    Pozdr 🙂

    • billfuckinggates: gratuluję nick-a 🙂 a odpowiadając na Twoje pytanie, to tylko i wyłącznie życie. Jak się spotkasz 2-3 razy z jakimś dużym problemem to potem będziesz pamiętał dlaczego to co w książkach napisali jest dobre. 🙂

    • a uzupełniając. Masz mniejsze prawdopodobieństwo popełnienia błędów projektowych bazy jeśli (bazę) będziesz projektował z myślą o bazie danych i wykorzystaniu całej stwojej wiedzy w tej materii.

      Tak jak napisalem wcześniej, Code First jest bardzo dobre dla doświadczonych developerów i podczas prototypowania. Do nauki to jest najgorsze z możliwych podejść.

  • EF jak widać nadal jest mocno niedopracowane.
    Co do code first, to jak pisze devMan, dla początkujący to jest zły start. Jeśli ktoś nie zna SQL’a i nie potrafi projektować struktury bazy posługując się podstawowymi zasadami normalizacji, to najpierw powinien te rzeczy poznać, zanim zabierze się za code first. Inaczej za kilka lat będzie masa programistów, którzy nie będą potrafili sklecić prostego select’a.

    • Co do odcinka, to z każdym jest zdecydowanie coraz lepiej Panowie, dzwięk lepszy, nie ma już olbrzymich rąk, coraz płynniej „nawijacie”, itp. 😉

  • A jak zainicjować tabele bazy danych w istniejącej już bazie ? Mam taka sytuacje, gdzie nie mogę z poziomu użytkownika MSSQLa utworzyć bazy, a jedynie z poziomu zarządzania hostingiem.

  • Witam
    Wzoruję się na tym co pokazujecie i mam problem. W ostatnim kroku (w Global.asax.cs) po wpisaniu CodingBlogContext(); mam info o błędzie „ERROR ‚CodingBlog.Service.Reposity.CodingBlog.Context.CodingBlogContext()’ is inaccessible due to its protection level”
    Nie umiem sobie z tym poradzić