Entity Framework 4.3.1 andernfalls zu erstellen (/öffnen) eine Datenbank [Threading-Anomalie?]

Habe ich verwendet, EF 4.1 (Ersten Code) in einer MVC 3-Projekt eine Weile zurück, und es war gut.

Heute habe ich versucht, mit EF 4.3.1 (Ersten Code) in einer WinForms-Projekt und stieß auf einige echte voodoo: (Das ursprüngliche Projekt an dem ich arbeitete, war WinForms, aber das gleiche gilt für die befestigt Konsole-Anwendung code.)

Wenn Sie versuchen, zu geben Sie eine einfache Klasse in der Datenbank, bekomme ich die folgende exception:
Datenbank kann nicht geöffnet werden "Test" die von der Anmeldung angeforderte. Die Anmeldung ist fehlgeschlagen.
Login fehlgeschlagen für Benutzer " [ComputerName]\[Administrator]'.

Ich habe versucht, die überprüfung der SQL Server (2008 R2) - Konfigurationen, aber meine user hat haben alle die Berechtigungen auf dem server.

HINWEIS: Die Datenbank hat nicht bestehen, wenn ich zuerst die Anwendung auszuführen.

Sogar der folgende Beispiel-code funktioniert nicht :

class Program
{
    public static void Main()
    {
        var person = new Person { Name = "Nathan" };
        using (var db = new MyContext())
        { //#1
            db.Persons.Add(person);
            db.SaveChanges();
        }
        Console.Write("Person saved !");
        Console.ReadLine();
    }
}

public class Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<Person> Persons { get; set; }
    public MyContext()
        : base("Data Source=localhost;Database=Test;Integrated Security=True;")
    { }
}

Ich habe versucht, neu zu installieren EF 4.3.1 - ohne Erfolg.
Ein Neustart des SQL-Server hatte auch keinen Effekt.

HINWEIS: ich habe bemerkt, ziemlich viele ähnliche Fragen herum, aber keiner sind beide das gleiche wie meine und beantwortet - ich hoffe ich werde hier fündig 🙂

Zu klären: Der Benutzer, dass der Zugriff verweigert wird, ist der Eigentümer (lokaler administrator) des Geräts.

EDIT: ich habe seit ein paar versuche und ich habe etwas ganz seltsames:

Wenn ich pause das Programm bei der Zeile "#1" und überprüfen Sie den Wert db.Datenbank.Exists() via Uhr Fenster, sagt Es mir: "Die Funktion Auswertung erfordert von allen threads ausgeführt werden" mit diesem kleinen wavey - button, den ich klicken kann, um es laufen alle threads.
Entity Framework 4.3.1 andernfalls zu erstellen (/öffnen) eine Datenbank [Threading-Anomalie?]

Wenn ich auf die Schaltfläche klicken, die Funktion ausgewertet wird False.

Kann ich jetzt tun 2 Dinge:

  1. Fortsetzen: In diesem Fall bekomme ich die genau die gleiche exception.
  2. Execute db.Datenbank.Create() aus dem Watch-Fenster: In diesem Fall wird das Programm erfolgreich ausgeführt und am Ende sehe ich die Datenbank, Tabelle und Zeile erstellt, in meinem SQL Management Studio.

Scheint wie eine einfache Lösung, rechts? Falsch!

Habe ich versucht, indem der Datenzugriff mit einem Aufruf db.Datenbank.CreateIfNotExists(); aber dann bekomme ich die genau die gleiche Ausnahme auf dieser Linie.

db.Datenbank.Initialize(true); hat keine Auswirkungen entweder...

HINWEIS:, Wenn durch die Verwendung der oben genannten Methode, die ich die Datenbank erstellen soll, kann ich Sie richtig nutzen von diesem Zeitpunkt an, so dass mindestens die Hälfte ein Trost 😛 Das problem ist natürlich, was passiert, wenn ich einen DropCreateIfModelChanges oder DropCreateAlways Initalizer (da bin ich in der Mitte der aktiven Entwicklung des Modells).

Dank.

[Bin ich besorge, es ist mehr ein Entity-Framework-problem als SQL Server.]

  • Sie sind in der Lage die Verbindung zu der Datenbank mit Ihren Anmeldeinformationen ohne EF (z.B. aus Visual Studio oder Sql Server Management Studio)?
  • Ja, mit dem Management Studio kann ich tun, was ich will in der Datenbank, einschließlich erstellen von Datenbanken, Tabellen, Zeilen aktualisieren, etc.
  • Verwenden Sie die integrierte Sicherheit?
  • Was meinst du? In den connection-string?
  • Ja. Hat dein connection-string enthalten Integrated Security=True "so etwas wie dieses:" provider connection string="Data Source=.\SQLExpress;Initial Catalog=Northwind;Integrated Security=True"' oder verwenden Sie login und Passwort?
  • Es ist geschrieben in der post... Mein connection string is "Data Source=localhost;Database=Test;Integrated Security=True;".
  • Tut mir Leid, dass. Ich konzentriert sich hauptsächlich auf die Zeile mit "login failed" Meldung. Sehen Sie diese Ausnahme beim Debuggen oder Sie sehen es auch, wenn die Anwendung ausgeführt wird. Wenn dies während der debugging - tun Sie geschehen, um "zu brechen, wenn exception geworfen wird" eingeschaltet? (Sie finden diese option im Debug->Excptions). Ich vermute, dies ist passiert - EF ist der Versuch, eine Verbindung zu der Datenbank, aber es schlägt fehl, da die Datenbank noch nicht existiert wird eine Ausnahme geworfen wird (das sehen Sie durch die oben genannte option eingeschaltet). Das ist in Ordnung, da, wenn dies geschieht, EF wird die Ausnahme abfangen und eine Verbindung zum master
  • (Fortsetzung) Datenbank um die Datenbank zu erstellen versuchte es zu verbinden in dem ersten Schritt. Nachdem die Datenbank erstellt wurde, wird es erneut auf die ursprüngliche Verbindungszeichenfolge für die Kommunikation mit der Datenbank.
  • Sie sind richtig, das war das problem, jetzt post, der als Antwort und ich werde es akzeptieren.
  • Super!!! Ich habe meine Kommentar als Antwort.
  • stackoverflow.com/questions/21065055/... Blick auf den zweiten Kommentar unter der Frage

Schreibe einen Kommentar