Facebook
From Mariusz K, 6 Years ago, written in C#.
Embed
Download Paste or View Raw
Hits: 255
  1. Zlecę nagranie paru poradników wideo z omówieniem poniższych zagadnień, najlepiej jedno pytanie to jeden filmik pokazany z przykładami tak średnio 5-20 min na filmik. Ogólnie chodzi o EntityFramework podejście Code-First w projekcie WPF C# z wykorzystaniem MVVM
  2.  
  3. 1. Jak dokładnie działa relacje jeden-do-wielu, tworzenie dwóch klas. Poniżej jeden z wielu przykładów jakie widziałem, chciałbym żeby mi wyjaśniono dlaczego czasami dodają słowo 'virtual' przy np. tutaj Gildii, oraz dlaczego używają nazwy właściwości takiej samej co nazwa klasy np. Gildia Gildia, co się stanie jeśli zmienię nazwę tej właściwości tzn. niby relacji i będzie tak 'public Gildia MojeGildie { get; set;}', chciałbym żeby mi to wyjaśniono na przykładach jak to będzie wyglądało bez virutal oraz z nim, czasami dodają jeszcze inta żeby służył jako klucz obcy np. GildiaId gdzie mamy jeszcze właściwość Gildia Gildia.. to też chciałbym żeby mi wyjaśniono w tym jednym punkcie/pytaniu np.
  4.  
  5.  
  6.  
  7. public class Gracz
  8. {
  9.    public int Id { get; set;}
  10.    public string Ksywka { get; set; }
  11.    public Gildia Gildia {get; set;}
  12.  
  13.    public Gracz() { }
  14.  
  15.    public Gracz(int id, string ksywka, Gildia gildia)
  16.    {
  17.       this.Id = id;      this.Ksywka = ksywka;   this.Gildia = gildia;
  18.    }
  19. }
  20.  
  21. public class Gildia
  22. {
  23.    public int Id { get; set;}
  24.    public string Nazwa { get; set; }
  25.    public ICollection<Gracz> Gracze {get; set;}
  26.  
  27.    public Gildia() { this.Gracze = new HashSet<Gracz>(); }
  28.  
  29.    public Gildia(int id, string nazwa, ICollection<Gracze> gracze)
  30.    {
  31.       this.Id = id;      this.Nazwa = nazwa;   this.Gracze = gracze;
  32.    }
  33. }
  34.  
  35. 2. Drugie pytanie opiera się na podstawie pierwszego tylko tutaj chodzi o pobieranie danych. Z tego co widziałem to używa się słowa Include przy pobieraniu co pozwoli za pobranie pozostałych informacji o klasie np. patrząc na listę graczy to pobranie włącznie z informacją o gildii wyglądało by chyba tak:
  36.  
  37. var gracze = cont.Gracze.Include(x => x.Gildie).ToList();
  38.  
  39. i powyżej chyba pobierze wszystkich graczy oraz do każdego gracza doczyta informacje o gildii, natomiast jeśli chodzi o pobranie gildii to:
  40.  
  41. var gildie = cont.Gildie.Include(x => x.Gracze).ToList();
  42.  
  43. tutaj chyba pobierze wszystkie gildie i wszystkich graczy przypisanych do danej gildii? to jest połowa zadania, gdzie chciałbym żeby pokazano mi to na przykładach z omówieniem jak to dokładnie działa, jeśli nie użyję tego Include to podobno reszta danych jest pobierana później automatycznie w zależności odwołania się do niej np. w graczu odwołujemy się do Gildii to niby pobiera.. chciałbym żeby pokazano dokłądnie jak to wygląda ORAZ jeśli jest inny sposób w miarę prosty na pobranie tych informacji.
  44.  
  45. 3. Trzecie pytanie dotyczy prostych operacji Dodaj / Aktualizuj / Odśwież / Usuń  biorąc na przykład powyższe klasy. Dodawanie jako tako wychodzi, kasowanie też ale czasami są problemy zwłaszcza jak są relacje co nie do końca czaję.. np. poniżej przykłady jakie znam
  46.  
  47.  
  48.  
  49. dodaj (tutaj dodaje fajnie):
  50. cont.Entity(gracz).Stat = NiePamietamNazwyKlasy.Add;
  51. cont.SaveCosTam();
  52.  
  53. aktualizacja i kasacja wyglada tak samo tylko z Add biore Modify cos tam oraz Delete tylko niestety nie zawsze to działa, próbowałem też coś typu
  54.  
  55. cont.Gracze.Remove(gracz);
  56. cont.SaveCosTam();
  57.  
  58.  
  59.  
  60. i też nie zawsze działało i tutaj chciałbym żeby pokazano na paru przykładach, gdzie są już utworzone relacje np. gracze mają swoje wybrane gildie oraz jest lista gildii która ma swoich graczy. No i przy kasowaniu gracza żeby nie kasowało gildii, a przy kasowaniu gildii żeby usunęło gildię oraz wszystkich przypisanych do niej graczy ORAZ druga opcja to usunie TYLKO gildię, ale gracze zostaną, chciałbym znać różne sytuacje jeśli chciałbym coś usunąć. Jeśli chodzi o 'Odśwież' to tutaj pokazanie pobrania tych informacji, może być powtórka z trzema zdaniami wspomnianymi z pytania '2'
  61.  
  62. 4. Czwarte pytanie dotyczy nazewnictwa, w przykładach w internetach pokazują tylko standardowe np. jako klucz główny to pole Id i wtedy niby entity wie, że to pole ma być kluczem głównym z autoinkrementacją, a co jeśli będę chciał zmienić nazwę np. na IdGracza albo GraczId czy też NumerIdGracza, z tego co wiem można dodać argument nad tym np.:
  63.  
  64.  
  65.  
  66. [Key]
  67. public int Id {get; set;}
  68.  
  69. no i to niby potraktuje jako klucz, nawet jak zmienię nazwę, ale tego chciałbym być pewien jak to wygląda i zrozumieć to jak to jest z nazwą nawet bez tego [Key], czy ludzie tylko tak o sobie podają nazwę Id czy raczej jest taki standard, gdzie EntityFramework rozpoznaje nazwy i tworzy odpowiednie klucze i relacje podobnie z relacjami właśnie jak jest:
  70.  
  71. public Gracz Gracz {get; set;}
  72. LUB
  73. public virtual Gracz Gracz {get; set;}
  74.  
  75. i co jak dam
  76. public Gracz Graczuniu {get;set;} // to czy też będzie dobrze rozpoznawane
  77.  
  78. czyli żeby mi pokazano na przykładach te główne ważne miejsca, gdzie nazwy mają znaczenie właśnie przy tych kluczach, relacjach także biorąc na przykład powyższe klasy, można je przerobić
  79.  
  80.  
  81.  
  82. Jeśli byłyby modyfikacje starych klas to prosiłbym o zakomentowanie starej wersji kodu i podpisanie komentarzem do którego pytania się tyczyło żebym sobie potem mógł przetestować
  83.  
  84.  
  85.  
  86. 5. Temat migracji, wiem jak włączyć migracje (Enable-Migrations), dodać (Add-Migration) zaktualizować bazę danych (Update-database) TYLKO tutaj często wywala mi byka, że dana tabela istnieje w bazie przez co muszę ją kasować ręcznie ALBO w utworzonej klasie migracji zakomentować kod odpowiedzialny za tworzenie tabeli i chciałbym żeby w tym pytaniu omówiono jak dokładnie wygląda migracja TAK żebym nie musiał kasować bazy danych czy też tabeli i wprowadzać zmiany w tabeli bez utraty danych np. w danej tabeli zmieniam nazwę kolumny czy też dodaję / kasuję kolumnę to żeby nie było tego komunikatu, że dana table jest utworzona..
  87.  
  88.  
  89.  
  90. No to by było na tyle jeśli chodzi o pytania, jeśli będzie dobrze omówione to możliwe, że będę miał kolejne pytania dotyczące MVVM, testów jednostkowych, wzorców projektowych i innych rzeczy.
  91.  
  92.  
  93.  
  94. Obecnie za całość mogę dać maksymalnie 150 zł jeśli filmik na każde pytanie będzie trwał dłużej niż 15 minut z dokładnym omówieniem, jeśli krócej to kwota w okolicy 100 zł o ile informacja będzie w zrozumiały dla mnie sposób przekazana (weryfikacja np. na podstawie jednego filmiku dotyczącego jednego z pięciu pytań)