Ich habe eine Reihe von Problemen, die versuchen, (Code-zuerst) Migrationen für meine SQL Server Compact 4.0-Datenbank für meine Desktop-App zu ermöglichen.SQL Server CE-Code Erste Migrationsprobleme
Enable-Migrations
funktioniert und das Verzeichnis Migrations
erstellt wird. Danach, wenn ich versuche, Add-Migration InitialMigration
laufen zu lassen, bekomme ich:
Zugriff auf die Datenbankdatei ist nicht erlaubt. [1914 Dateiname = Logo.sdf, SeCreateFile]
Dies ist das erste Problem ist, aber ich löste es von Visual Studio als Administrator ausgeführt wird ... nicht wie die Lösung und weiß auch nicht, wenn Später in der Produktion wird es funktionieren, ohne dass die App im Admin-Modus ausgeführt wird. Ich lasse dieses Problem beiseite jetzt ...
Meine Verbindungszeichenfolge:
<add name="LogoContext"
connectionString="Data Source=Logo.sdf"
providerName="System.Data.SqlServerCE.4.0"/>`
So nach Add-Migration InitialMigration
in Administrator-Modus ausgeführt wird erhalte ich eine leere Migration ... das ist ok. Dann habe ich die Migration löschen und eine neue Klasse hinzuzufügen:
using System;
using System.Collections.Generic;
public class Blog
{
public int ID { get; set; }
public string Title { get; set; }
}
ich einen Verweis auf die Kontextklasse:
public class LogoContext : DbContext
{
public DbSet<Word> Words { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<Blog> Blogs { get; set; }
}
Dann Add-Migration InitialMigration
laufen wieder und erhalten:
public partial class InitialMigration : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.Blogs",
c => new
{
ID = c.Int(nullable: false, identity: true),
Content = c.String(maxLength: 4000),
})
.PrimaryKey(t => t.ID);
}
public override void Down()
{
DropTable("dbo.Blogs");
}
}
Nach dem Laufen Update-Database
Ich sehe:
Applying code-based migrations: [201304211225255_InitialMigration].
Applying code-based migration: 201304211225255_InitialMigration.
Running Seed method.
Jetzt erscheint das Problem - in meinem Server Explorer untersuche ich die Datenbank Logo.sdf
und es nicht enthält die Tabelle Blogs
! Ich versuche auch diesen Code aus meiner Anwendung auszuführen:
var db = new LogoContext();
db.Posts.Add(new Blog { Title= "moo" });
db.SaveChanges();
zu überprüfen, ob vielleicht mein Server-Explorer nicht angezeigt wird auf den Tisch .. aber ich erhalte eine Ausnahme:
Die angegebene Tabelle nicht existieren. [Blogs]
So sind die Wanderungen offensichtlich nicht auf meine Logo.sdf
Datei angelegt werden :(
Wenn ich die Verbindungszeichenfolge von app.config
, die Verbindung zu einer lokalen Instanz von SQL Server Express entfernen angenommen. Und es funktioniert es einwandfrei !! Wenn ich die Datenbank mit SQL Server Management Studio zu untersuchen, habe ich den neuen Blogs
Tisch und auch eine Systemtabelle über Migrationen für Metadaten sehen ...
ein weiteres kleines Stück Information:
Wenn ich versuche, Update-Database
erneut auszuführen, bekomme ich "Keine ausstehenden code-basierten Migrationen." Und das sagt mir, dass einige Daten gespeichert werden, schließlich ... zumindest einige Metadaten über Migrationen, aber immer noch kann ich ' Diese Tabelle finden Sie im Server-Explorer.
Ich verwende VS 2012 und EF 5.0.
Bitte helfen Sie mir, dies zu verstehen ... Es sieht für mich aus, dass etwas ernsthaft falsch ist, weil es nur mit SQL Server Express-Instanz funktioniert, aber nicht mit SQL Server CE 4.0. Danke ((
david
Ich schlage vor, Sie beginnen mit einem vollständigen Pfad zu Ihrer Datenbank-Datei in Ihrer Verbindungszeichenfolge, meine Vermutung ist, Sie haben mehrere Kopien der Datenbankdatei, zum Beispiel in Ihrem bin/debug-Ordner – ErikEJ
Hmm ich dachte auch darüber nach, aber ich stellte sicher, dass VS auf das richtige Logo.sdf zugreift, indem es die bin/Debug-Version löschte ... Ich habe es nie mit absoluten Pfaden getestet, weil ich eine Option ausgeschlossen habe, dass irgendwo eine dritte Kopie der db-Datei sein könnte. .. UND dort ist es, in "C: \ Programme (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Logo.sdf" ... ok, so dass das Geheimnis gelöst ist - danke .. Also habe ich wirklich den absoluten Pfad zur Datei verwenden? Wenn ich die Lösung kompiliere, enthält die Konfigurationsdatei der kompilierten App auch einen absoluten Pfad, der nicht gut ist ...? – davidhq
Verwenden Sie während der Entwicklung einen vollständigen Pfad, oder besser, initialisieren Sie den Kontext mit einer Verbindungszeichenfolge, die Sie im Code erstellen. – ErikEJ