无法首先获得EF 6代码来创建表

时间:2014-08-04 20:02:22

标签: entity-framework ef-code-first entity-framework-6

我已经拥有一个包含EF范围之外的表的数据库。但我希望自动创建EF使用的表格。

public class SessionInfo
{
    public Guid Id {get;set;}
    public string Name { get; set; }
    public DateTime StartsOn { get; set; }
    public DateTime EndsOn { get; set; }
    public string Notes { get; set; }
}

public class StudentsDbContext:DbContext
{
    public StudentsDbContext():base("name=memory")

    {
        Database.Log = s => this.LogDebug(s);         

    }

    public DbSet<SessionInfo> Sessions { get; set; }
}

此代码只会引发异常,因为表SessionInfoes不存在。

 using (var db = new StudentsDbContext())
 {
       db.Sessions.Add(new SessionInfo() {Id = Guid.NewGuid(), Name = "bla"});           
       var st = db.Sessions.FirstOrDefault();
 }

我需要做什么才能让EF创建&#34; SessionInfoes&#34; (无论名称,它不重要)表格本身?我的印象是,当首次使用上下文进行更改或查询时,Ef将创建表。

更新

经过一番挖掘后,似乎EF和Sqlite不能很好地在一起玩,但最多你可以使用EF来进行查询,但这就是它。没有表创建,没有添加实体。

1 个答案:

答案 0 :(得分:1)

EF需要其他信息才能执行此操作。您必须先指定IDatabaseInitializer。查看this list并找到一个适合您需求的文件(例如:MigrateDatabaseToLatestVersion,DropCreateDatabaseAlways,DropCreateDatabaseIfModelChanges等)。

然后创建你的课程:

public class MyDatabaseInitializer : MigrateDatabaseToLatestVersion
  <MyDbContext,
   MyDatabaseMigrationConfiguration>

然后还创建初始化程序的配置(对吧?):

public  class DatabaseMigrationsConfiguration 
  : DbMigrationsConfiguration<MyDbContext>
{
    public DatabaseMigrationsConfiguration()
    {
        this.AutomaticMigrationDataLossAllowed = true;
        this.AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(MyDbContext context)
    {
        // Need data automagically added/update to the DB
        // during initialization?

        base.Seed(context);
    }
}

然后,初始化数据库的一种方法是:

var myContext = new MyDbContext(/*connectionString*/);

Database.SetInitializer<MyDbContext>(new MyDatabaseInitializer());
myContext.Database.Initialize(true);

有些人更喜欢use the command line to migrate databases,但我不想假设我总是可以从命令lin访问数据库。