2015-01-14 4 views
8

Ich benutze Hangfire in meinem ASP.NET MVC Web App, es hatte erfolgreich installiert. Ich möchte das gleiche LocalDb verwenden, um in der Warteschlange befindliche Jobs zu speichern, die Hangfire aus der Warteschlange entfernen und verarbeiten soll, wie ich es gewohnt war, Daten zu speichern. Jedoch renne ich in den folgenden Fehler, wenn ich seinen ConnectionString oder seinen in Web.config in Startp.cs definierten Namen zur Verfügung stellte. Ich hatte keine Probleme Hinzufügen, Löschen von Aktualisierungsdaten in der gleichen LocalDb vor dem Hangfire.Verwenden von Hangfire, Verbindungszeichenfolge in Startup.cs wirft Kann Datei nicht als Datenbankfehler anhängen

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(); 
      }); 
     } 

Mein Projekt Solution "Hangfire.Highlighter" genannt

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

überprüfen Sie Ihre Ordner App_Data und stellen Sie sicher, dass die 'aspnet-Hangfire.Highlighter-20150113085546' db existiert. –

+0

Das ist seltsam, es gibt keine db in/App_Data – jerryh91

+0

Fügen Sie es hinzu, und Sie sollten in Ordnung sein. –

Antwort

0

Ist die DB bereits erstellt? Können Sie versuchen, ein anderes Connection String-Format zu verwenden, so etwas wie "Server =. Database = HangFire.Highlighter; Trusted_Connection = True;"

+0

Ich sehe keinen DB unter App_Data /. Wie erstelle ich die DB, wenn sie nicht da ist? – jerryh91

16

Ich weiß, das ist alt - aber es war 9 Monate und ich zog mir auch die Haare aus - und entschied mich, einen Bericht darüber zu schreiben here.

Meine Lösung war nur eine schnelle und schmutzige DbContext zu schaffen, um es in die richtige Verbindungszeichenfolge zeigen und rufen Database.CreateIfNotExists im Konstruktor:

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

Im HangfireBootstrapper.Start() Methode, die ich tun so etwas wie diese:

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(); 

    } 
} 

nicht sicher, warum Hangfire hat so eine harte Zeit mit LocalDB - vielleicht kann sie nur ausgewachsene SQL-Instanzen behandeln? So oder so funktioniert das für mich, neue Teammitglieder und neue dev/staging/prod-Instanzen, die aufstehen.

+1

Eine einfache und saubere Lösung zum Erstellen der Datenbank. Vielen Dank. –

+0

Das funktioniert für mich, Danke! Hangfire sollte jedoch die db-Datei erstellen. – WAKU

+1

Fast für mich gearbeitet. Wenn jemand anderes mit dieser Lösung kämpft, finden Sie in meiner Antwort: http://StackOverflow.com/a/42120633/2279059 –

0

Ich weiß auch, dass das alt ist, aber in letzter Zeit lief. Hier ist meine Lösung ist:

  1. In Visual Studio, gehen Sie auf 'Ansicht -> SQL Server Objekt-Explorer'
  2. eine Verbindung zur Datenquelle, wenn es nicht bereits verbunden ist. In dem obigen Beispiel war es '(LocalDB) \ v11.0'
  3. Rechts auf 'Databases' klicken -> 'auf Neue Datenbank hinzufügen'
  4. Fill Database name = Ex: 'aspnet-Hangfire.Highlighter-20150113085546' oder was auch immer Sie die Datenbank in der Verbindungszeichenfolge benannt haben.
  5. Datenbankspeicherort füllen = Dies sollte das Datenverzeichnis in Ihrer Anwendung sein, 'App_Data' für das MVC-Projekt.

Dies behoben das Problem in meinem Fall.

0

Jacks Antwort nicht für mich arbeiten, weil ich in dieses Problem lautete: No connection string named could be found in the application config file

Ich habe es mit den folgenden Modifikationen zu arbeiten:

  1. entfernen "name=" aus dem String in der Basis initializer . Danke an: https://stackoverflow.com/a/37697318/2279059
  2. Das verschiebt den Fehler auf den Aufruf von UseSqlServerStorage. Anstatt also "HangfireContext" zu übergeben, kopiere ich einfach die Verbindungszeichenfolge aus dem Dummy-Datenbankkontext.

komplette Setup-Code:

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(); 
    } 
} 
Verwandte Themen