【问题标题】:No tables are created when using code first EF使用代码优先 EF 时不创建表
【发布时间】:2018-03-11 12:43:33
【问题描述】:

所以我尝试先使用 EF 代码在 Azure 上部署数据库。我有一个模型:

public class User
{
    [Key]
    public int PersonID { get; set; }

    [Required(ErrorMessage = "A first name is required.")]
    [StringLength(20, MinimumLength = 2, ErrorMessage = "Your firstname needs to be atleast 2 letters long")]
    [RegularExpression(@"^[a-zA-Z]*$", ErrorMessage = "Your firstname can only contain letters")]
    [Display(Name = "First Name:")]
    public string FirstName { get; set; }
}

数据上下文类:

public class DataContext : DbContext
{
    public DataContext() : base("DataContext")
    {

    }

    public DbSet<User> User { get; set; }
}

DataContextInitalizer 类:

public class DataContextInitializer : DropCreateDatabaseIfModelChanges<DataContext>
{ 

}

在 global.asax 文件中初始化数据上下文:

Database.SetInitializer(new DataContextInitializer());

最后是web.config中连接数据库的字符串:

  <connectionStrings>
<add name="DataContext" connectionString="Data Source=tcp:*.database.windows.net,1433;Initial Catalog=TestApi20180311012458_db;User ID=usernamehere;Password=passwordhere" providerName="System.Data.SqlClient" />

构建解决方案时不会创建表。我不知道我错过了哪里。你能看出什么问题吗?

【问题讨论】:

  • 构建解决方案时,不会创建任何数据库,因为没有运行 EF 代码。数据库初始化程序将在模型构建器之后运行,一旦第一次访问数据库(即第一次以它为目标的查询)就会执行。但是,我不知道如果将构造函数设置为“只是一个新的”,将使用什么初始化程序。通常EF在初始化时会重新创建数据库,使用CreateDatabaseIfNotExists初始化策略,但是使用一个新的可能和null策略一样,永远不会为你创建数据库。
  • @DevilSuichiro 我现在在初始化程序的种子方法中有一些 EF 代码,但数据库中仍然没有创建表。不确定您所说的“未创建数据库”是什么意思。我确实有一个数据库,但没有从实体到表的映射。
  • 你得到的错误是什么?
  • @DevilSuichiro no build or runtime error,错误是没有生成表。由于我有一个用户数据库集,我应该有一个用户表,但我没有,我不知道为什么。

标签: entity-framework azure frameworks entity connection-string


【解决方案1】:

构建解决方案时不会创建表。我不知道我错过了哪里。你能看出什么问题吗?

您的代码仅用于连接本地项目中的 Azure sql。而数据初始化只是用来初始化表中的数据。但是您的表尚未创建。如果要在 Azure sql 中创建表,可以使用 Migrations

web.config 中的 Azure sql 连接字符串:

 <connectionStrings>
        <add name="ConnectionStringName" providerName="System.Data.SqlClient" connectionString="Data Source=tcp:[databasename].database.windows.net,1433;Initial Catalog=[databasename];Integrated Security=False;User Id=[username];Password=[password];Encrypt=True;TrustServerCertificate=False;MultipleActiveResultSets=True" />   
</connectionStrings>

打开工具>Nuget Mackage 管理器>包管理器控制台。然后输入以下代码:

Enable-migrations
Add-migration initial
update-database

之后,您可以看到在 Azure Sql 中创建了表。

另一种方式,您可以使用 发布工具 连接到 Azure sql 并自动使用 Code First Migrations。不需要使用代码手动配置。打开 发布设置 以配置 Azure sql。或者您可以阅读此article 以了解更多详情。

【讨论】:

  • 如果我的回答有帮助,您可以将其标记为答案以帮助其他社区成员找到。谢谢!
猜你喜欢
  • 2013-01-14
  • 2014-05-27
  • 2012-11-15
  • 2012-08-05
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多