Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 32

Discussione: Linq - opinioni

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Quote Originariamente inviata da pietro09 Visualizza il messaggio
    Il discorso fila, ma è alla fine solo l'utilizzo pratico che può permettere di scegliere una tecnica piuttosto che un'altra.
    Per esempio, io preferisco trattare l'xml e una serie di tabelle oracle, con strumenti diversi: xpath per l'uno e il classico sql per il secondo.

    Andiamo sul pratico: ho una tabella o vista oracle e voglio fare una ricerca o voglio impostare un filtro.
    Tipicamente presento un popup con diversi campi. Il risultato è la composizione della condizione where di una istruzione sql.

    Bene, si riesce a farlo questo con Linq? se si, un esempio?
    Credo di capire dove vuoi arrivare, quindi cerco di andare al punto che immagino ti interessi
    Per prima cosa se lavori con Oracle dovresti scaricare il data provider per net da loro sito, ma non mi è mai capitato di usare Oracle con EF, quindi segui un po il loro sito, anche se dovrebbe essere come tutti gli altri provider. Dopo avendo già una stringa con SQL che ti arriva dal client web (si?), non devi far altro che darla in pasto al DbSet tramite SqlQuery.

    Il contesto:
    codice:
        public class Context : DbContext
        {
            public Context() : base("DB") { }
            public DbSet<Stato> Stati { get; set; }
            public DbSet<Continente> Continenti { get; set; }
        }
    
    
        [Table("Stati")]
        public class Stato
        {
            public int ID { get; set; }
            public string Nome { get; set; }
            public int Continente_ID { get; set; }
    
    
            [ForeignKey("Continente_ID")]
            public Continente Continente { get; set; }
        }
    
    
        [Table("Continenti")]
        public class Continente
        {
            public int ID { get; set; }
            public string Nome { get; set; }
    
    
            public List<Stato> Stati { get; set; }
    
    
            public Continente()
            {
                this.Stati = new List<Stato>();
            }
        }
    aggiungiamo qualche dato e salviamo (per esempio con linq)
    codice:
                using (Context ctx = new Context())
                {
                    var Europa = new Continente() { Nome = "Europa" };
                    Europa.Stati.Add(new Stato() { Nome = "Italia" });
                    Europa.Stati.Add(new Stato() { Nome = "Francia" });
                    Europa.Stati.Add(new Stato() { Nome = "Albania" });
                    Europa.Stati.Add(new Stato() { Nome = "Belgio" });
    
    
                    var America = new Continente() { Nome = "America" };
                    America.Stati.Add(new Stato() { Nome = "Brasile" });
                    America.Stati.Add(new Stato() { Nome = "Argentina" });
                    America.Stati.Add(new Stato() { Nome = "Cile" });
                    America.Stati.Add(new Stato() { Nome = "USA" });
    
    
                    ctx.Continenti.AddRange(new[] { Europa, America });
                    ctx.SaveChanges();
                }
    l'uso con query sql:
    codice:
                using (Context ctx = new Context())
                {
                    var statiAmericani = ctx.Stati.SqlQuery("SELECT * from dbo.Stati WHERE Continente_ID=1").ToList();
                }
    l'uso con stored:
    codice:
                using (Context ctx = new Context())
                {
                    var statiAmericani = ctx.Stati.SqlQuery("dbo.GetStatiByContinente_ID @p0",1).ToList();
                }
    comandi al database:
    codice:
                using (Context ctx = new Context())
                {
                    ctx.Database.ExecuteSqlCommand("UPDATE dbo.Stati SET Nome ...");            }
    nel config devi aggiungere il nome che vuoi dare alla stringa di connessione, io nel costruttore vuoto del Context passo alla base "DB", quindi dovrebbe avere questo nome, ma puoi usare quello che ti pare.

    codice:
    <connectionStrings>
        <add name="DB" providerName="System.Data.SqlClient" connectionString="Server=.\SQLEXPRESS;Database=Linq;Integrated Security=True;"/>
      </connectionStrings>
    Nel tuo caso dovrai mettere come providerName la stringa del provider Oracle (lo vedrai eventualmente nel loro sito).

    Comunque ci sono anche altri modi anche con sintassi linq (crei dei predicati che accodi), ma se devo essere onesto per il web preferisco altre soluzioni, tipo Breeze, che mi consente di scrivere query in javascript del tutto simili a linq (o in c# qualora voglia connettermi tramite App) direttamente sul client, e interrogare il server direttamente con quelle tramite chiamate in background alle WebApi alimentate da EF. Sul server lascio solo il minimo indispensabile magari legato a ruoli o permessi, e ovviamente i vari controlli lato server.

    Ammollarinci goppai!

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Quote Originariamente inviata da U235 Visualizza il messaggio
    Ammollarinci goppai!

    questo non è Linq, vero ?

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ci provo. Grazie.
    Pietro

  4. #4

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    La domanda iniziale comunque ha avuto risposta: no, non è necessario rideployare. Si può cambiare la query perchè a quanto vedo il contesto ha metodi con parametri stringa. È giusto, a parte se è "corretto" ?

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Quote Originariamente inviata da djciko Visualizza il messaggio
    La domanda iniziale comunque ha avuto risposta: no, non è necessario rideployare. Si può cambiare la query perchè a quanto vedo il contesto ha metodi con parametri stringa. È giusto, a parte se è "corretto" ?
    Ciao
    in genere se voglio creare un sistema estendibile senza ricompilare uso la tecnica del plugin, in pratica creo una libreria condivisa che verrà implementata nei plugin (sempre librerie) e carico a runtime il plugin.
    Comunque il linea di massima si, visto che usi le stringhe puoi continuare a farlo nello stesso modo.

    @Pietro
    su windows form è da un pò che non ci lavoro, ma ci dovrebbero essere anche li i controlli adatti. Prova a dare un occhiata al datagridview o al listview, ti dovrebbe bastare mettere la tabella in binding nel datasource del controllo.
    Windows Form lo trovo un po vecchiotto comunque, preferisco wpf anche per via del fatto che permette un disaccoppiamento netto degli strati, oltre alla grande flessibilità dei controlli per l'interfaccia.

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Quote Originariamente inviata da U235 Visualizza il messaggio
    Ciao
    in genere se voglio creare un sistema estendibile senza ricompilare uso la tecnica del plugin, in pratica creo una libreria condivisa che verrà implementata nei plugin (sempre librerie) e carico a runtime il plugin.
    Comunque il linea di massima si, visto che usi le stringhe puoi continuare a farlo nello stesso modo.
    no, non uso le stringhe, era solo un modo per sapere SE SI DEVE RI-DEPLOYARE l'applicazione all'esigenza di tirare fuori un campo in piu'

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Quote Originariamente inviata da djciko Visualizza il messaggio
    no, non uso le stringhe, era solo un modo per sapere SE SI DEVE RI-DEPLOYARE l'applicazione all'esigenza di tirare fuori un campo in piu'
    intendi per EF? boh io ti consiglierei di creare il contesto su come libreria separata, quindi nel caso riscrivi e fai upload solo di quella dll. Ma qui entra in gioco l'eventuale predisposizione che dai alla cosa.
    Tipicamente come fai? come sviluppi un "software" (in generale)? usi dei pattern?

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ho provato a fare una pagina web usando Entity framework, ListView e il controllo entity data source (se non sbaglio).
    Effettivamente, senza scrivere neanche una riga di codice, si riesce a leggere, modificare, aggiungere dati a una tabella.

    Ma con una windows form come si fa? c'è un controllo che automatizzi tutto senza scrivere codice?
    Pietro

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Tendo alla separazione fra l'sql e c#. Per tanti motivi.
    Uno di questi è dare un senso al ruolo dei DBA
    Stored procedures quindi..

    Comunque si una soluzione è scrivere le query in una libreria separata e rideployarne la dll.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.