Entity Framework code first - 不是要创建表吗?

Entity Framework code first - isn't it meant to create tables?

MUCH 研究 Entity Framework(针对 DNX 4.5.1)之后,我一直得出相同的结论,即在使用代码优先方法时 EF 应该创建任何不存在的 table。

数据库上下文:

public class AccountReadContext : DbContext
    {
        public AccountReadContext(DbContextOptions options)
        : base(options)
        {}

        public DbSet<AccountRead> AccountReads { get; set; }  
    }

数据库提供商:

public void AddAccountRead(AccountRead reads)
        {
            _dbContext.AccountReads.Add(reads);
            _dbContext.SaveChanges(); //System.Data.SqlClient.SqlException (0x80131904): Invalid object name 'AccountRead'
        }

我知道为什么会发生这种情况(缺少 table)。我想不通的是如何让代码优先来做它的事情并创建 table?

您必须在您的项目中启用代码优先迁移。在 PowerShell window(程序包管理控制台)中,您发出命令:

Enable-Migrations

然后,每次更新 POCO 对象、添加新表等时,您都需要输入:

Add-Migration

这里有一些关于此的文档: https://msdn.microsoft.com/en-us/data/jj591621.aspx

默认情况下应启用自动迁移。如果禁用它们 (AutomaticMigrations = false),您应该手动 运行 Update-Database 命令,或将数据库初始化程序设置为 MigrateDatabaseToLatestVersion<,>

最后我不得不在项目的根文件夹中使用 EntityFramework 命令:

Update database:
dnx ef database update -c "AccountReadContext"

Add / Remove columns (specify column name):
dnx ef migrations add Reading -c "AccountReadContext"
dnx ef database update -c "AccountReadContext"

This provides a bit more info