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"
在 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"