IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Core 2.1 virtual properties - vlastní list

Aktivity
Avatar
Adam Gajdečka:15.2.2019 11:03

Ahoj,
programuji v Core 2.1 s lazy loading. Chtěl bych do ApplicationUser přidat to, jaké je uživatel pohlaví. Tedy žena x muž (jen do budoucna to musí jít rozšířit kvůli EU...)

Vytvořil jsem si tabulku Genders, jenže to není úplně správně, jelikož jednak jsou to jen 2 hodnoty a prakticky se to měnit nebude a když už, tak v kódu.

  public class ApplicationUser : IdentityUser
    {

        public int? GenderId { get; set; }

        public virtual Gender Gender { get; set; }

}

A jakmile si někdy vytáhnu Usera, tak mám rovnou k dispozici Gender.Name apod. Jak to udělat tak, abych nemusel mít tabulku Genders a zároveň nepřišel o tuto skvělou funkci.

Mi stačí si to někde definovat třeba v listu, jen jak to použít v tom virtual.

Díky

 
Odpovědět
15.2.2019 11:03
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Adam Gajdečka
vajkuba1234:15.2.2019 14:47

Jde ti o to, abys nemel seznam pohlavi nacitan z databaze? Muzes pro to pouzit enum...

Nahoru Odpovědět
15.2.2019 14:47
No hope, no future, JUST WAR!
Avatar
JerryM
Člen
Avatar
Odpovídá na Adam Gajdečka
JerryM:16.2.2019 8:06
  1. zahoď .NET core 2.1 a rychle přejdi na 3.0..
  2. pokud se nepletu tak pořád sou oficiálně jen 2 pohlaví a to muž a žena :)) ale pokud chceš nějakej mix typu fliudi, ty co maj pindíka a sou to ženský, ty co nemaj pindíka a sou to chlapy, chlap s pindíkem a jednou koulí, chlap s pindíkem a 2 koulema atd... tak to si budeš muset udělat sám jako textový popis typu List<> :))))))))))
 
Nahoru Odpovědět
16.2.2019 8:06
Avatar
Odpovídá na JerryM
Adam Gajdečka:16.2.2019 10:41

1.) 3.0 není ještě hotový. Je stále preview 2. Tudíž přecházet zatím nikam nebudu.

  1. třeba v Británii mají těch pohlaví myslím 50. Asi to je jejich výmysl, ale kdy to bude v ČR?

Můžu ten list použít nějak v tom public virtual List<Gender> ..??

 
Nahoru Odpovědět
16.2.2019 10:41
Avatar
Odpovídá na vajkuba1234
Adam Gajdečka:16.2.2019 10:43

díky. Na to jsem taky přišel, jenže to má dost problémů. A jednou z věcí je to, jak mi to vrací JSON na API, jelikož používám React JS. Podařilo se mi nakonec to vrátit s hodnotou i s tím názvem, jenže chodí to v jiné struktuře a přepisovat React nechci.

Myslel jsem, že tyto změny provedu jen na backendu a zvenčí to bude vypadat stejně...

 
Nahoru Odpovědět
16.2.2019 10:43
Avatar
JerryM
Člen
Avatar
Odpovídá na Adam Gajdečka
JerryM:16.2.2019 11:33

no udělej si jednoduše class a v něm výčtový typ podle libosti, asi nejlepší je něco ve smyslu "pole" aby se ti k tomu dobře přistupovalo a aby to mělo i indexer. těch 50 pohlaví budeš muset asi nějak pojmenovat to já nevim jak to je na tobě koukni sem

https://stackoverflow.com/…n-of-an-enum
https://docs.microsoft.com/…ration-types

 
Nahoru Odpovědět
16.2.2019 11:33
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Adam Gajdečka
vajkuba1234:16.2.2019 11:36

Jake problemy s tim byly?

Nahoru Odpovědět
16.2.2019 11:36
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na JerryM
vajkuba1234:16.2.2019 11:38

Proc pole?

Nahoru Odpovědět
16.2.2019 11:38
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Adam Gajdečka
vajkuba1234:16.2.2019 11:41

U enumu pracujes jen s indexem.

Nahoru Odpovědět
16.2.2019 11:41
No hope, no future, JUST WAR!
Avatar
Odpovídá na vajkuba1234
Adam Gajdečka:16.2.2019 11:42

aktuálně mám v databázi např.

Id: 1, Name: "Muž"

takže server mi vráti pole objektů tedy

[
        {
id: 1,
name: Muž
        }
]

takto to potřebuji vracet.

Jakmile to dám do toho enum, tak jak mi to může vrátit "Muž", když se to bude jmenovat MAN, jelikož je to v kódu a tam to píšu prostě anglicky, ani jinak by to nešlo, když je tam háček.

Takže to je takový hlavní problém. Dělám českou aplikaci.

 
Nahoru Odpovědět
16.2.2019 11:42
Avatar
JerryM
Člen
Avatar
Odpovídá na Adam Gajdečka
JerryM:16.2.2019 11:58

my ti rozumíme, to že to píšeš anglicky je dobře,ale pohlaví se píše Gender ne ?
a když si uděláš indexer tak to bude vypadat jako List<něco> pohlaví a pak se na to ptáš jako
gender["Adam Gajdečka"] a ono ti to vrátí "male" ve formě json což je jen způsob formátování textu ....

 
Nahoru Odpovědět
16.2.2019 11:58
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Adam Gajdečka
vajkuba1234:16.2.2019 13:06

A co treba pouzit neco jako Dictionary<Enum­s.Gender, string>() ci podobnou variaci?

Je zbytecne to mit v db. Pripadne pis dalsi problemy

Nahoru Odpovědět
16.2.2019 13:06
No hope, no future, JUST WAR!
Avatar
Adam Gajdečka:16.2.2019 22:49

Tak nakonec jsem to vyřešil jednoduše.

public class ReadOnlyRepository : IReadOnlyRepository
    {
        private readonly ApplicationDbContext _context;

        public ReadOnlyRepository(ApplicationDbContext context) => _context = context;


        public List<Gender> GetGenders()
        {
            List<Gender> genders = new List<Gender>();
            genders.Add(new Gender { Id = 0, Name = "Muž" });
            genders.Add(new Gender { Id = 1, Name = "Žena " });
            return genders;
        }
    }
}

S těch navigation property jsem to virtual Gender musel smazat. Vrací mi to jen to Id a případně jméno dohledám. Nakonec mi to vůbec nevadí, jelikož kompletuje se to vše až u klienta v JS.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
16.2.2019 22:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.