generická třída - jak definovat typ proměnných   otázka

C#, Entity Framework, Databáze

Dobrý den,

chtěl bych požádat o radu.

Mám rozsáhlou databázi ke které přistupuji pomocí EF a rád bych vytvořil třídu ve které bych měl z této databáze uloženou tabulku. Třída by obsahovala kolekci ObservableCollection a měla metody pro přidání ,editaci a mazání záznamu z databáze. Protože je každá tabulka jiného typu tak bych chtěl v mojí třídě definovat datový typ kolekce dynamicky.


//definice tridy

public class ClassTable<T> where T: class
    {
        private ObservableCollection<T> collection;
        
        public ClassTable(DbSet<T> entity,DbContext context)
        {
            collection = new ObservableCollection<T>();
            this.entity = entity;
            this.context = context;
            entity.ToList().ForEach(p => collection.Add(p));
        }
        
        public int GetNewId<T>()
        {
            if (typeof(T) == typeof(vehicle))
            {
                return collection.Max(p => p.id) + 1;  
            }

            if (typeof(T) == typeof(......))
            {
                return collection.Max(p => p.id) + 1;
            }
        }
    }



// pouziti této tridy
public void Init()
{
    ClassTable<vehicle> table = new ClassTable<vehicle>(databazeEntities.type, databazeEntities);
    int newId = table.GetNewId<vehicle>()
}

v definici třídy kde je "return collection.Max(p => p.id) + 1" to hlásí chybu že v T není definice pro "id" tomu rozumím ani nemůže, ale chtěl bych zeptat zda je nějaká možnost v kódu říct že je tato kolekce typu <vehicle> a tím by s tím šlo pracovat?? Nebo případně jak se řeší práce s proměnnýma které jsou definované T.

V databázi mám hodně tabulek a chtěl jsem udělat obecnou třídu která by s nimi uměla základní operace.

Děkuji Tom

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nerozumím tomu, co vlastně potřebujete."Mám rozsáhlou databázi ke které přistupuji pomocí EF"

a "V databázi mám hodně tabulek a chtěl jsem udělat obecnou třídu která by s nimi uměla základní operace."

EF přeci mapuje tabulky na entity (třídy), které zjednodušují práci s DB a umí dělat s tabulkami v DB základní operace.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tabulku z databáze dostanu do kolekce a data před zobrazením ještě upravuju. Ale protože je to pokaždé jiná tabulka zkouším generickou třídu. Zapomeňte na databáze prostě by mě jen zajímalo v té kolekci kde je generický definovaný typ zda se dá přistupovat k proměnným "p.id"

//definice kolekce
private ObservableCollection<T> collection;


// protože není známy typ nelze přistoupit k proměnné "id"  

            if (typeof(T) == typeof(vehicle))
            {
                return collection.Max(p => p.id) + 1;  
            }
 
            if (typeof(T) == typeof(......))
            {
                return collection.Max(p => p.id) + 1;
            }
 

zda se da ta kolekce nějak "přetypovat" aby bylo možné přistupovat k proměnný ve třídě p.id

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud by "vehicle" a další třídy splňovaly nějaký společný interface, dalo by se toho využít v definici generické třídy: "... where T : MyInterface".

Anebo zkusit operátory "is", "as", ale to už nemá podle mě s genericitou (obecností) nic společného.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback