Tôi đang làm việc với dự án đầu tiên của tôi bằng Entity Framework 7 và đang kết nối với một Máy chủ SQL nơi Cơ sở dữ liệu đã được tạo nhưng chưa có bảng nào trong đó. Tôi đã tạo DbContext
và tạo một lớp học, sau đó đặt DbSet<>
trong ngữ cảnh của tôi. Tôi chạy các lệnh để cho phép di chuyển và tạo di chuyển đầu tiên, sau đó rand lệnh để cập nhật cơ sở dữ liệu. Mọi thứ trông có vẻ ổn, không có lỗi nào xảy ra, nhưng khi tôi nhìn vào cơ sở dữ liệu chỉ có bảng EFMigraitonsHistory
được tạo. Khi tôi nhìn vào lớp đã được tạo cho lần di chuyển ban đầu, nó cơ bản là trống. Tôi đang làm gì sai?Entity Framework 7 di chuyển không tạo bảng
Commands Tôi đang chạy:
dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update
Bối cảnh:
namespace JobSight.DAL
{
public class JobSightDBContext : DbContext
{
public DbSet<NavigationMenu> NavigationMenu { get; set; }
}
}
Bảng Class:
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"]);
});
}
Class cho di chuyển ban đầu (autogenerated bởi EF):
namespace JobSight.WebUI.Migrations
{
public partial class Initial : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}
Edit: Sau khi thực hiện những gì Poke đã gợi ý này là di cư autogenerated mới của tôi. Bảng này vẫn chưa được tạo ra ở cấp cơ sở dữ liệu.
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");
}
}
}
Tôi đã thêm mã ghi đè vào ngữ cảnh của mình và giờ đây lớp di chuyển không có mã để tạo bảng nhưng khi chạy lệnh cập nhật, nó vẫn không tạo bảng của tôi. Tôi đã cập nhật bài đăng gốc bằng các lệnh tôi đang chạy để thực hiện việc này. – Matthew
Liệu bản cập nhật cơ sở dữ liệu 'ef' có trả về bất kỳ đầu ra nào không? Bạn có chắc là bạn đang xem xét cơ sở dữ liệu chính xác không? Kiểm tra chuỗi kết nối của bạn để đảm bảo những gì bạn đang làm việc. – poke
Tôi chắc chắn đó là DB đúng. Tôi có thể xóa bảng EFMigrationHistory và nó được tái tạo, cộng với nó là chỉ có DB trên máy chủ. Khi tôi chạy lệnh 'dnx ef database update', tất cả những gì nó làm là ngồi đó rồi nói' done'. Tôi có phải làm điều gì đó đặc biệt vì DB đã tồn tại không có bất kỳ bảng nào không? – Matthew