2 Stimmen

Beim Erstellen von Code-First Entity Framework, um Tabellen auf SQL Azure zu erstellen

Ich bin neu in Entity Framework mit Code-First.

Ich habe jetzt ein paar Dinge ausprobiert, aber ich kann EF nicht dazu bringen, Tabellen in meiner SQL Azure-Datenbank zu erstellen. Kann mir jemand einige Schritte und Einstellungen empfehlen, die ich überprüfen sollte.

Der Mitgliedsprovider hat keine Probleme damit, seine Tabellen zu erstellen.

Ich habe PersistSecurityInfo=True in der Verbindungszeichenfolge hinzugefügt. Die Verbindungszeichenfolge verwendet das Hauptbenutzerkonto für den Server.

Wenn ich die Tabellen in der Datenbank mit sql implementiere, funktioniert alles einwandfrei.

Ich habe folgendes in der WebRole.cs

            //Initialisiere die Datenbank
        Database.SetInitializer(new DbInitializer());

Mein DbInitializer (der sich nicht ausführt, bevor ich eine "Ungültige Objektname 'dbo.ClientAccountIFAs'." bekomme, wenn ich zum ersten Mal auf die Tabelle zugreife. Irgendwann nach dem Start.

    public class DbInitializer:DropCreateDatabaseIfModelChanges
{
    protected override void Seed(ReykerSCPContext context)
    {
        using (context)
        {
            //Füge Dokumententypen hinzu
            context.DocTypes.Add(new DocType() { DocTypeId = 1, Description = "Erklärung" });
            context.DocTypes.Add(new DocType() { DocTypeId = 2, Description = "Vertragsnote" });
            context.DocTypes.Add(new DocType() { DocTypeId = 3, Description = "Benachrichtigung" });
            context.DocTypes.Add(new DocType() { DocTypeId = 4, Description = "Rechnung" });
            context.DocTypes.Add(new DocType() { DocTypeId = 5, Description = "Dokument" });
            context.DocTypes.Add(new DocType() { DocTypeId = 6, Description = "Newsletter" });
            context.DocTypes.Add(new DocType() { DocTypeId = 7, Description = "Geschäftsbedingungen" });

            //Füge Reyker-Kontotypen hinzu
            context.ReykerAccountTypes.Add(new ReykerAccountType() { ReykerAccountTypeID = 1, Description = "ISA" });
            context.ReykerAccountTypes.Add(new ReykerAccountType() { ReykerAccountTypeID = 2, Description = "Handel" });
            context.ReykerAccountTypes.Add(new ReykerAccountType() { ReykerAccountTypeID = 3, Description = "SIPP" });
            context.ReykerAccountTypes.Add(new ReykerAccountType() { ReykerAccountTypeID = 4, Description = "CTF" });
            context.ReykerAccountTypes.Add(new ReykerAccountType() { ReykerAccountTypeID = 5, Description = "JISA" });
            context.ReykerAccountTypes.Add(new ReykerAccountType() { ReykerAccountTypeID = 6, Description = "Direkt" });
            context.ReykerAccountTypes.Add(new ReykerAccountType() { ReykerAccountTypeID = 7, Description = "ISA & Direkt" });

            //Speichere die Änderungen
            base.Seed();
        }

Und meine DBContext-Klasse sieht so aus

    public class ReykerSCPContext : DbContext
{
    //Verbindung explizit festlegen
    public ReykerSCPContext():base("ReykerSCPContext"){}

    //Tabellen definieren
    public DbSet ClientAccountIFAs { get; set; }
    public DbSet Documents { get; set; }
    public DbSet DocTypes { get; set; }
    public DbSet ReykerAccountTypes { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Wird aufgerufen, wenn das Modell erstellt wird. Kann verwendet werden, um spezielle Beziehungen wie viele-zu-viele zu definieren.

    }

Der Code, um auf die zuzugreifen, ist

        public List GetAllClientAccountIFAs()
    {
        using (DataContext)
        {

            var caiCollection = from c in DataContext.ClientAccountIFAs
                                select c;

            return caiCollection.ToList();
        }
    }

und es gibt einen Fehler in der letzten Zeile. Hilfe!

0voto

NER1808 Punkte 1669

Das Problem hier stellte sich als vermischt mit dem Universal Membership Provider heraus, den ich verwendete. Der Membership-Provider instantiierte die Datenbank vor Entity Framework, sodass EF jedes Mal dachte, dass die Datenbank existierte und nicht versuchte, sie zu löschen.

Um dies zu lösen, stellte ich sicher, dass ich nicht nur den Initialisierer in der OnStart-Methode der WebRole.cs setzte, sondern auch eine Abfrage an den DbContext erzwang.

Dadurch wurde die Datenbank vor den Mitgliedstabellen erstellt und alles war gut. Sobald der Mitgliedsanbieter zum ersten Mal aufgerufen wird, erstellt er die erforderlichen Tabellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X