Entity Framework 7-migration nicht das erstellen von Tabellen
Arbeite ich mit meinem ersten Projekt mit Entity Framework 7 und bin Verbindung zu einem SQL Server, wo die Datenbank ist auch schon erstellt, aber es werden keine Tabellen in es noch nicht. Ich habe meine DbContext
und eine Klasse angelegt, dann legen Sie eine DbSet<>
in meinem Kontext. Ich lief die Befehle zum aktivieren von Migrationen und die Erstellung der ersten migration, dann rand der Befehl zum aktualisieren der Datenbank. Sah alles gut zu funktionieren, keine Fehler kam, aber wenn ich mir die Datenbank nur die EFMigraitonsHistory
Tabelle erstellt wurde. Wenn ich mir die Klasse, die erstellt wurde für die erste migration es ist im wesentlichen leer. Was mache ich falsch?
Befehle, die ich verwende:
dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update
Kontext:
namespace JobSight.DAL
{
public class JobSightDBContext : DbContext
{
public DbSet<NavigationMenu> NavigationMenu { get; set; }
}
}
Tabelle Klasse:
namespace JobSight.DAL
{
public class NavigationMenu
{
[Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Int16 ID { get; set; }
public string ControllerName { get; set; }
public string ActionName { get; set; }
public string ExternalURL { get; set; }
public string Title { get; set; }
public Int16? ParentID { get; set; }
public virtual NavigationMenu Parent { get; set; }
}
}
Start.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<JobSightDBContext>(options =>
{
options.UseSqlServer(Configuration["Data:JobSightDatabase:ConnectionString"]);
});
}
Klasse für die erste migration (automatisch generierte durch EF):
namespace JobSight.WebUI.Migrations
{
public partial class Initial : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}
Bearbeiten:
Nach tun, was Poke vorgeschlagen hat, das ist mein neues auto-generated migration. Die Tabelle ist noch nicht erstellt auf der Datenbank-Ebene obwohl.
namespace JobSight.WebUI.Migrations
{
public partial class MyFirstMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "NavigationMenu",
columns: table => new
{
ID = table.Column<short>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
ActionName = table.Column<string>(nullable: true),
ControllerName = table.Column<string>(nullable: true),
ExternalURL = table.Column<string>(nullable: true),
ParentID = table.Column<short>(nullable: true),
Title = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_NavigationMenu", x => x.ID);
table.ForeignKey(
name: "FK_NavigationMenu_NavigationMenu_ParentID",
column: x => x.ParentID,
principalTable: "NavigationMenu",
principalColumn: "ID",
onDelete: ReferentialAction.Restrict);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable("NavigationMenu");
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Einheit in Ihrer Datenbank Kontext-ersten. Zumindest würden Sie brauchen, um dies zu tun:
Das problem mit Ihren Migrationen war ein bisschen versteckt in Ihrem Projekt-layout. Also, was Sie haben, ist ein
JobSight.DAL
Projekt enthält die Entitäten und die Datenbank-Kontext. Und dann haben Sie ein ProjektJobSight.WebUI
die eigentliche ASP-Projekt mit derStartup.cs
mit den Datenbank-setup.Diese Probleme verursacht, da durch die default-EF wird einfach davon ausgehen, alles zu finden in der aktuellen Baugruppe. Also wenn Sie starten, die
ef
Befehl von Ihrem web-Projekt es schaffen wird, die Migrationen in der es, auch wenn der Kontext in einem anderen Projekt. Aber wenn man dann versucht, die migration, die EF wird ihn nicht finden, da es nur suchen im Rahmen der Projekt.So, um dieses Problem zu lösen, müssen Sie zum erstellen der Migrationen in der
DAL
Projekt. Sie können das tun, indem Sie das Projekt beim Aufruf deref
Befehl:Können Sie überprüfen, dass dies funktioniert durch ausführen von
dnx ef migrations list
danach. Dies sollte jetzt wieder dieExample
migration; vorher, dass dieser Befehl nicht zurück nichts: Er konnte nicht finden, eine migration, die ist der Grund, warum dieupdate
Befehl nur gesagtDone
(ohne migration) und die Datenbank wurde nicht erstellt. Also, wenn Sie erhalten jetzt die migration dort können Sie dann übernehmen Sie es mit:Beachten Sie, dass seit dem Umzug ist nun erstellt, in der DAL-Projekt, müssen Sie einen Verweis auf
EntityFramework.MicrosoftSqlServer
es, andernfalls wird das Projekt nicht kompilieren. Sie müssen das tun, bevor Sie ausführen können, um dielist
Befehl oben.Schließlich, für mehr Informationen dazu finden Sie dieses Problem.
ef database update
Rückgabe einer Ausgabe? Sind Sie sicher, dass Sie sich bei der richtigen Datenbank? Überprüfen Sie Ihre Verbindungszeichenfolge, um sicherzustellen, was mit dem Sie arbeiten.dnx ef database update
Befehl alle es tut, ist, dort sitzen dann sagtdone
. Muss ich etwas besonderes tun, da die DB bereits vorhandenen einfach nicht mit Tabellen?Up
Teil, richtig?CreateTable
Befehl. Ich werde nach dem neuen OP in einem AugenblickMigrations
Ordner von deinem Projekt, und dann die Neuerstellung und die Anwendung der migration?Test1
dieser Zeit. Ich sehe dieTest1
migration Klasse gemacht und die history-Tabelle wird zur DB Hinzugefügt, aber nicht das NavigationMenu TabellemodelBuilder.Entity<NavigationMenu>();
Linie.Dies ist zwar nicht die Antwort auf die ursprüngliche Frage, poste ich meine Antwort hier, weil es vielleicht jemand helfen, der ein ähnliches problem. Mein problem war auch, dass die Tabellen nicht erstellt wurden, aber
dotnet ef migrations add InitialCreate
hat erstellen 3 .cs-Dateien in die Migrationen Ordner. Aberdotnet ef database update
nur MigrationsHistory Tisch unddotnet ef migrations list
nicht zurückkehrte Migrationen.Es stellte sich heraus, dass das problem war, dass die Migrationen Ordner ausgeschlossen wurde von der Visual Studio-Projekt. Sobald ich es wieder, alles hat gut funktioniert.