我正在使用实体框架代码第一种方法,并具有以下模型和数据库上下文。
public class Patient
{
public int Id { get; set; }
public string FirstName { get; set; }
}
public class PatientContext:DbContext
{
public DbSet<Patient> Persons { get; set; }
}
现在要在数据库中创建模型,我必须运行Enable Migration
,如果有任何更改,则必须使用包管理器控制台运行Update database
。
但是我有什么方法可以使用代码。因此,当有人运行控制台应用程序时,它将创建所有表模式。
class Program
{
static void Main(string[] args)
{
//Code to Create my tables
//Something similar to enable migration and update database
}
}
我可以在主应用程序中创建一个记录并创建表结构,但创建一个创建表结构的记录似乎是多余的。此外,如果有任何模式更改,以下代码将引发异常。
有更好的方法吗?
static void Main(string[] args)
{
using (PatientContext pcontext = new DatabaseMigApp.PatientContext())
{
pcontext.Patients.Add(new Patient() { FirstName = "Steve",Id = 1});
pcontext.SaveChanges();
}
}
答案 0 :(得分:3)
是的,有。您必须首先从包管理器控制台运行Enable-Migrations -EnableAutomaticMigrations,以便它按如下方式生成Configuration类:
internal sealed class Configuration : DbMigrationsConfiguration<DatabaseMigApp.PatientContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(DatabaseMigApp.PatientContext context)
{
}
}
然后您可以按如下方式更新Program.cs,以根据您的模型更改自动迁移到最新版本:
using System.Data.Entity;
class Program
{
static void Main(string[] args)
{
using (PatientContext pcontext = new DatabaseMigApp.PatientContext())
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<PatientContext, Configuration>());
pcontext.Database.Initialize(true);
}
}
}
如果您不希望使用自动迁移并手动生成它们(以获得更多控制权),则可以在每次更改模型时关闭自动迁移和添加迁移。在运行控制台应用程序时,program.cs中的代码仍然足以更新数据库。
详细了解自动迁移here