2 messaggi dal 17 giugno 2021
Salve A tutti sono nuovo in questo forum e nuovissimo in net core e c# quindi vi chiedo scusa sin da subito se le mie domande sono veramente elementari, e Vi ringrazio sin da ora per l' aiuto che mi darete.
Detto ciò:

sto creando una app che prende i dati da diversi database identici per tipi di tabelle ma diversi per dati quindi ho creato il dbcontetx che vorrei fare agganciare al database in base alla scelta del cliente
     public class PagheContext : DbContext
    {
        public PagheContext()
        {
        }

        public string Conn { get; set; }

        private readonly IHttpContextAccessor _HttpContextAccessor;
        
        public PagheContext(DbContextOptions<PagheContext> options, IHttpContextAccessor HttpContextAccessor)
        : base(options)
        {
            _HttpContextAccessor = HttpContextAccessor;
            Conn = "Paghe" + _HttpContextAccessor.HttpContext.Session.GetString("ConCliente");
            System.Diagnostics.Debug.WriteLine("Test" + Conn);
        }
        
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                .AddJsonFile("appsettings.json")
                .Build();
    
            System.Diagnostics.Debug.WriteLine("Test2" + Conn);
            optionsBuilder.UseSqlServer(configuration.GetConnectionString("Paghe56"));
        }

        public DbSet<Utente> Utenti { get; set; }
//      public DbSet<Dipendente> Dipendenti { get; set; }
    }
}

come si vede dal codice ho recuperato il numero del cliente tramite un HttpContextAccessor e funziona, l ho testato con il debug.
ma non riesco a capire come creare una variabile che prenda il dato da public PagheContext e lo metta in protected override void OnConfiguring.

ripeto sono un novizio in c# quindi qualsiasi consiglio è gradito.
82 messaggi dal 19 ottobre 2005
dev.to
eternityck ha scritto:
Salve A tutti sono nuovo in questo forum e nuovissimo in net core e c# quindi vi chiedo scusa sin da subito se le mie domande sono veramente elementari, e Vi ringrazio sin da ora per l' aiuto che mi darete.
Detto ciò:

sto creando una app che prende i dati da diversi database identici per tipi di tabelle ma diversi per dati quindi ho creato il dbcontetx che vorrei fare agganciare al database in base alla scelta del cliente
     public class PagheContext : DbContext
    {
        public PagheContext()
        {
        }

        public string Conn { get; set; }

        private readonly IHttpContextAccessor _HttpContextAccessor;
        
        public PagheContext(DbContextOptions<PagheContext> options, IHttpContextAccessor HttpContextAccessor)
        : base(options)
        {
            _HttpContextAccessor = HttpContextAccessor;
            Conn = "Paghe" + _HttpContextAccessor.HttpContext.Session.GetString("ConCliente");
            System.Diagnostics.Debug.WriteLine("Test" + Conn);
        }
        
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                .AddJsonFile("appsettings.json")
                .Build();
    
            System.Diagnostics.Debug.WriteLine("Test2" + Conn);
            optionsBuilder.UseSqlServer(configuration.GetConnectionString("Paghe56"));
        }

        public DbSet<Utente> Utenti { get; set; }
//      public DbSet<Dipendente> Dipendenti { get; set; }
    }
}

come si vede dal codice ho recuperato il numero del cliente tramite un HttpContextAccessor e funziona, l ho testato con il debug.
ma non riesco a capire come creare una variabile che prenda il dato da public PagheContext e lo metta in protected override void OnConfiguring.

ripeto sono un novizio in c# quindi qualsiasi consiglio è gradito.


Leggendo il codice che hai postato mi pare di capire che ti basterebbe passare
Conn
a
optionsBuilder.UseSqlServer(configuration.GetConnectionString(Conn));
.
Modificato da santoni1981 il 25 agosto 2021 09:31 -
2 messaggi dal 17 giugno 2021
Esatto!!
Solo che non me lo Prende!
se scrivo così
      private readonly IHttpContextAccessor _HttpContextAccessor;
        
        public PagheContext(DbContextOptions<PagheContext> options, IHttpContextAccessor HttpContextAccessor)
        : base(options)
        {
            _HttpContextAccessor = HttpContextAccessor;
            Conn = "Paghe" + _HttpContextAccessor.HttpContext.Session.GetString("ConCliente");
            System.Diagnostics.Debug.WriteLine("Test" + Conn);
        }
        
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                .AddJsonFile("appsettings.json")
                .Build();
    
            System.Diagnostics.Debug.WriteLine("Test2" + Conn);
            optionsBuilder.UseSqlServer(configuration.GetConnectionString(Conn));
        }


e lo eseguo nel debug mi dà questo risultato
'iisexpress.exe' (CoreCLR: clrhost): caricamento di 'D:\Daces\SitoDaces\paghe\bin\Debug\netcoreapp3.1\Microsoft.EntityFrameworkCore.Abstractions.dll' completato. 
TestPaghe56
Eccezione generata: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll
Eccezione generata: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll
TestPaghe56
'iisexpress.exe' (CoreCLR: clrhost): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.18\System.Linq.Queryable.dll' completato. 
Test2
Eccezione generata: 'System.ArgumentNullException' in Microsoft.EntityFrameworkCore.SqlServer.dll

il primo test funziona il Test2 non da nessun risultato

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.