Я работаю с моим первым проектом с использованием Entity Framework 7 и подключаюсь к SQL Server, где база данных уже создана, но в ней пока нет таблиц. Я создал свой DbContext
и создал класс, а затем установил DbSet<>
в моем контексте. Я выполнил команды для включения миграции и создания первой миграции, а затем rand команду для обновления базы данных. Все выглядело нормально, никаких ошибок не возникало, но когда я смотрю на базу данных, была создана только таблица EFMigraitonsHistory
. Когда я смотрю на класс, который был создан для первоначальной миграции, он по сути пуст. Что я делаю не так?Entity Framework 7 миграция не создает таблицы
Команды Я бегу:
dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update
Контекст:
namespace JobSight.DAL
{
public class JobSightDBContext : DbContext
{
public DbSet<NavigationMenu> NavigationMenu { get; set; }
}
}
Таблица Класс:
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; }
}
}
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<JobSightDBContext>(options =>
{
options.UseSqlServer(Configuration["Data:JobSightDatabase:ConnectionString"]);
});
}
класса для начальной миграции (по EF генерироваться автоматически):
namespace JobSight.WebUI.Migrations
{
public partial class Initial : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}
Edit: После делать то, что предложил Poke это мои новые автоматически генерируемые миграции. Однако таблица все еще не создается на уровне базы данных.
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");
}
}
}
Я добавил код переопределения в свой контекст, и теперь у класса миграции есть код для его создания, но при запуске команды обновления он все равно не строит мою таблицу. Я обновил исходное сообщение с помощью команд, которые я запускаю для этого. – Matthew
Результирует ли обновление базы данных ef? Вы уверены, что ищете правильную базу данных? Проверьте строку подключения, чтобы убедиться, с чем вы работаете. – poke
Я уверен, что это правильный БД. Я могу удалить таблицу EFMigrationHistory, и она будет воссоздана, плюс это единственная БД на сервере. Когда я запускаю команду dnx ef database update, все, что она делает, сидит там, а затем говорит «done». Должен ли я делать что-то особенное, поскольку БД уже существовала, просто не имея таблиц? – Matthew