2016-04-11 9 views
0

Aus irgendeinem Grund scheint dieses "kleine" Beispiel nicht auf meinem PC zu funktionieren, mache ich etwas falsch?Rekursion in EF scheint den Kontext überhaupt nicht zu initialisieren

... Ich bekomme "Ressourcen initialisiert" auf der Konsole, aber mein Verständnis ist, dass dies meine db auch erstellen sollte. Die Verbindungszeichenfolge ist definitiv korrekt, und ich habe einfach eine leere Konfigurationsklasse für die Migrationsdateien, die "AutomaticMigrationsEnabled = false" hinzugefügt hat. In der Ctor, ich habe auch eine erste Migration scripted mit "Add-Migration Initial" in der Paket-Manager-Konsole, die ordnungsgemäß eine funktionierende Migration erstellt.

Ich kann testen, dass all dies funktioniert, indem Sie "update-database" aufrufen und sehen, dass es die richtige db generiert.

Warum also nicht "automatisch" meine db wie alle meine anderen Kontexte erstellen?

Randbemerkung:

Dies ist ein Auszug aus dem Code von einem viel größeren Web-Projekt entfernt in einer Konsole app, normalerweise verwende ich MSDeploy neue DBs ausrollen, indem Sie einfach den Code bereitstellen, aber dies scheint zu verursachen IIS, um bei der Verarbeitung der ersten Anforderung einfach einzufrieren.

EDIT: Die fehlenden Bits ...

Hier ist die Migration, die erzeugt wird:

public partial class Initial : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable(
      "dbo.ResourceStrings", 
      c => new 
       { 
        Id = c.Int(nullable: false, identity: true), 
        SectionId = c.Int(nullable: false), 
        Culture = c.String(nullable: false), 
        Name = c.String(nullable: false), 
        DisplayName = c.String(nullable: false), 
        ShortDisplayName = c.String(nullable: false), 
        Description = c.String(nullable: false), 
       }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.ResourceSections", t => t.SectionId, cascadeDelete: true) 
      .Index(t => t.SectionId); 

     CreateTable(
      "dbo.ResourceSections", 
      c => new 
       { 
        Id = c.Int(nullable: false, identity: true), 
        ParentSectionId = c.Int(), 
        Name = c.String(nullable: false), 
       }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.ResourceSections", t => t.ParentSectionId) 
      .Index(t => t.ParentSectionId); 

    } 

    public override void Down() 
    { 
     DropForeignKey("dbo.ResourceStrings", "SectionId", "dbo.ResourceSections"); 
     DropForeignKey("dbo.ResourceSections", "ParentSectionId", "dbo.ResourceSections"); 
     DropIndex("dbo.ResourceSections", new[] { "ParentSectionId" }); 
     DropIndex("dbo.ResourceStrings", new[] { "SectionId" }); 
     DropTable("dbo.ResourceSections"); 
     DropTable("dbo.ResourceStrings"); 
    } 
} 

... und (auch erzeugt durch EF/Microsoft bei der Aktivierung von Migrationen auf das hier ist meine Konfigurationsklasse app) ...

internal sealed class Configuration : DbMigrationsConfiguration<Tests.ResourcesContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 

    protected override void Seed(Tests.ResourcesContext context) 
    { 

    } 
} 

... wie ich oben sagte, wenn ich die „update-Datenbank“ Befehl aus dem Paket-Manager-Konsole verwenden, es ist alles perfekt funktioniert, kann ich nicht zu laufen scheinen der Code und haben es die db selbst erzeugen.

Antwort

1

Das Ausführen des Codes aus Ihrer Frage funktionierte für mich richtig, also würde es etwas falsch mit den Bits vorschlagen, die Sie uns nicht gezeigt haben. Außerdem kann der Code nicht zu "Ressourcen initialisiert" gelangen, ohne einen erstellten Kontext aufzurufen, was auf ein mögliches Problem mit den Verbindungszeichenfolgen hindeutet.

Ich würde beginnen, indem Sie dies mit einem Haltepunkt aufrufen und das foo Objekt untersuchen, speziell die Verbindungszeichenfolge der erstellten Datenbank überprüfen. Vielleicht wurde es irgendwo erstellt, wo Sie es nicht bemerkt haben, wie bei einer lokalen Verbindung? Wenn ja, dann hat es vielleicht die automatische Verbindungszeichenfolge und nicht die erwartete Zeichenfolge verwendet.

+0

Yeh das war mein Verdacht vor der Frage. Mein Web-Stack hat 10 andere db's und alle Verbindungs-Strings sind bis auf den db-Namen identisch, also kann ich nicht sehen, wie das das kaputt machen würde ... naja, zumindest ist es nur etwas Lokales für meine Maschine ... stehe dabei Ich traf es mit dem Debugger – War

+0

Datenquelle = Initial Catalog = Resources; ... – War

+0

oh das ist seltsam ... wenn ich tatsächlich einen Abschnitt der db hinzufüge und savechanges aufruft, bevor ich die select-Abfrage mache, erstellt er die db ... wie seltsam! – War

Verwandte Themen