[C#] Reflection per accedere ad una Lista(Entità DB)

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
ldvubuntu
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 331
Iscrizione: lunedì 23 luglio 2018, 19:22
Desktop: Ubuntu Studio
Distribuzione: Ubuntu Studio, Amd 64, 64 bit
Sesso: Maschile

[C#] Reflection per accedere ad una Lista(Entità DB)

Messaggio da ldvubuntu »

Ciao a tutti, vorrei usare la Reflection per accedere alla lista di Articoli presenti nel DB.
Qui è definita la classe Classe che raggruppa le entità:

Codice: Seleziona tutto

    public partial class Classe : DbContext
    {
        public Classe()
            : base("name=Classe")
        {
            
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();            
        }
    
        public DbSet<Articoli> Articoli { get; set; }
   }
Invece qui sotto richiamo la classe:

Codice: Seleziona tutto

    
    
    	     Quello che vien fatto qui di seguito(Reperire gli articoli dalla classe Classe/DbContext)
    
             Classe nc = new Classe();

            foreach(Articoli a in nc.Articoli.ToList())
            {
                Console.WriteLine(a.CodiceArticolo);
            }
            
            

Codice: Seleziona tutto

            //Deve essere possibile realizzarlo per qualsiasi entità(Articolo, Cliente, Ordine...),
            //Pensavo di usare la Reflection, così:
            
            Type typeClassContext = classe.GetType();

            PropertyInfo articoli = typeClassContext.GetProperty("Articoli");

            Type typeArticoli = articoli.PropertyType;
            
            
            object x = typeArticoli.InvokeMember("ToString",            
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.InvokeMethod, null, classe.Articoli, null);
            
            //Notare che dovrei sostituire "classe.Articoli" con un un oggetto Type ottenuto tramite il nome: "Articoli"

            MessageBox.Show(x.ToString());

//Qui accedo alla query(con il metodo "ToString"), ma se invece di "ToString" mettessi "ToList" purtroppo non riesco ad ottenere la lista...

:ciao:
ldvubuntu
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 331
Iscrizione: lunedì 23 luglio 2018, 19:22
Desktop: Ubuntu Studio
Distribuzione: Ubuntu Studio, Amd 64, 64 bit
Sesso: Maschile

Re: [C#] Reflection per accedere ad una Lista(Entità DB)

Messaggio da ldvubuntu »

Ciao, ho <parzialmente> risolto così:
Tuttavia dovrei riuscire a passare il type=Articoli come stringa/variabile.

Codice: Seleziona tutto

            Type typeClassContext = classe.GetType();

            Object obj = Activator.CreateInstance(typeClassContext);

            object x = obj.GetType().InvokeMember("Articoli", BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
                                    
            DbSet<Articoli> y = (DbSet<Articoli>)x;
       
            MessageBox.Show(y.ToList()[0].Altezza.ToString());
Grazie a chi aiuta... :ciao:
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 7 ospiti