2015-01-14 6 views
8

Sto utilizzando Hangfire nella mia ASP .Net MVC Web App, è stato installato correttamente. Mi piacerebbe utilizzare lo stesso LocalDb per archiviare i lavori in coda per Hangfire in modo da accodare ed elaborare come ho usato per i dati memorizzati. Tuttavia sto correndo nell'errore qui sotto quando ho fornito il suo connectionString o nome definito in Web.config in Startp.cs. Non ho avuto problemi nell'aggiungere, cancellando i dati di aggiornamento nello stesso localDb prima del bombardamento.Utilizzo di Hangfire, stringa di connessione fornita in Avvio.cs non è possibile allegare file come errore di database

Cannot attach the file 'c:\users\jerry_dev\documents\visual studio 2013\Projects\Hangfire.Highlighter\Hangfire.Highlighter\App_Data\aspnet-Hangfire.Highlighter-20150113085546.mdf' as database 'aspnet-Hangfire.Highlighter-20150113085546'. 

Startup.cs: 

public void Configuration(IAppBuilder app) 
     { 
      ConfigureAuth(app); 
      app.UseHangfire(config => 
      { 
       string hangfireConnectionString = @"Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-Hangfire.Highlighter-20150113085546.mdf;Initial Catalog=aspnet-Hangfire.Highlighter-20150113085546;Integrated Security=True"; 
       config.UseSqlServerStorage(hangfireConnectionString); 
       config.UseServer(); 
      }); 
     } 

Il mio progetto di soluzione si chiama "Hangfire.Highlighter"

Web.config: 

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-Hangfire.Highlighter-20150113085546.mdf;Initial Catalog=aspnet-Hangfire.Highlighter-20150113085546;Integrated Security=True" providerName="System.Data.SqlClient" /> 
</connectionStrings> 
+0

controllare la cartella App_Data e fare in modo che esista db il 'aspnet-Hangfire.Highlighter-20.150.113,085546 millions'. –

+0

Questo è strano, non c'è db in/App_Data – jerryh91

+0

Aggiungilo e dovresti stare bene. –

risposta

0

è il DB già creato? Puoi provare a utilizzare un diverso formato di stringa di connessione? Qualcosa del genere, "Server = .; Database = HangFire.Highlighter; Trusted_Connection = True;"

+0

Non vedo alcun DB in App_Data /. Come posso creare il DB se non è lì? – jerryh91

16

So che questo è vecchio - ma è stato 9 mesi e mi sono tirato i capelli anche su questo pure - e ho deciso di fare un articolo su di esso here.

La mia soluzione era quella di creare solo un DbContext rapido e sporco, puntarlo alla stringa di connessione corretta e chiamare Database.CreateIfNotExists nel costruttore:

public class HangfireContext : DbContext 
{ 
    public HangfireContext() : base("name=HangfireContext") 
    { 
     Database.SetInitializer<HangfireContext>(null); 
     Database.CreateIfNotExists(); 
    } 
} 

Nel HangfireBootstrapper.Start() metodo che faccio qualcosa di simile:

public void Start() 
{ 
    lock (_lockObject) 
    { 
     if (_started) return; 
     _started = true; 

     HostingEnvironment.RegisterObject(this); 

     //This will create the DB if it doesn't exist 
     var db = new HangfireContext(); 

     GlobalConfiguration.Configuration.UseSqlServerStorage("HangfireContext"); 

     // See the next section on why we set the ServerName 
     var options = new BackgroundJobServerOptions() 
     { 
      ServerName = ConfigurationManager.AppSettings["HangfireServerName"] 
     }; 

     _backgroundJobServer = new BackgroundJobServer(options); 

     var jobStarter = DependencyResolver.Current.GetService<JobBootstrapper>(); 

     //See the Recurring Jobs + SimpleInjector section 
     jobStarter.Bootstrap(); 

    } 
} 

Non capisco perché Hangfire ha un momento così duro con LocalDB - forse può gestire solo i casi conclamati di SQL? In entrambi i casi ciò funziona per me, i nuovi membri del team e le nuove istanze di dev/staging/prod che si alzano in piedi.

+1

Una soluzione semplice e pulita per la creazione del database. Grazie. –

+0

Questo funziona per me, grazie! Tuttavia, Hangfire dovrebbe creare il file db. – WAKU

+1

Quasi ha funzionato per me. Se qualcun altro sta lottando con questa soluzione, vedi la mia risposta: http://stackoverflow.com/a/42120633/2279059 –

0

Anche io so che questo è vecchio, ma si è imbattuto in questo di recente. Ecco la mia soluzione:

  1. In Visual Studio, andare su 'Visualizza -> SQL Server Esplora oggetti'
  2. connettersi all'origine dati se non è già collegato. Nell'esempio di cui sopra è stato '(LocalDB) \ v11.0'
  3. clic destro su 'Database' -> 'Aggiungi Nuovo Database'
  4. nome Fill Database = Es: 'ASPNET-Hangfire.Highlighter-20.150.113,085546 millions' o qualunque sia il nome del database nella stringa di connessione.
  5. Fill Database location = Questa dovrebbe essere la directory dati nell'applicazione, 'App_Data' per il progetto MVC.

Questo ha risolto il problema nel mio caso.

0

risposta di Jack non ha funzionato per me, perché mi sono imbattuto in questo problema: No connection string named could be found in the application config file

ho preso a lavorare con le seguenti modifiche:

  1. Rimuovere "name=" dalla stringa nella inizializzazione di base . Grazie a: https://stackoverflow.com/a/37697318/2279059
  2. Questo sposta l'errore alla chiamata di UseSqlServerStorage. Quindi, invece di passare "HangfireContext", copio semplicemente la stringa di connessione dal contesto del database fittizio.

completo codice di installazione:

public class HangfireContext : DbContext 
{ 
    public HangfireContext() : base("HangfireContext") // Remove "name=" 
    { 
     Database.SetInitializer<HangfireContext>(null); 
     Database.CreateIfNotExists(); 
    } 
} 

public partial class Startup 
{ 
    public static void ConfigureHangfire(IAppBuilder app) 
    { 
     var db = new HangfireContext(); 

     GlobalConfiguration.Configuration.UseSqlServerStorage(db.Database.Connection.ConnectionString); // Copy connection string 

     app.UseHangfireDashboard(); 
     app.UseHangfireServer(); 
    } 
} 
Problemi correlati