【问题标题】:How can I create a database and tables at runtime using Entity Framework 6?如何使用 Entity Framework 6 在运行时创建数据库和表?
【发布时间】:2016-08-09 14:13:52
【问题描述】:

我有一个使用 Entity Framework 6(数据库优先)的应用程序。我的数据库已经存在,但我希望能够在新环境中运行我的应用程序,并让代码创建数据库和表(如果它们尚不存在)。

如何在 Entity Framework 6 中实现这一点?我见过使用 DbContext.CreateDatabase() 的旧示例,但该方法在 EF6 中不可用。值得一提的是,该数据库位于 SQL Azure 中。

编辑:有些人一直在建议 CreateDatabaseIfNotExists 初始化策略,这应该是默认的。不幸的是,尝试在尚未创建数据库的新环境中运行应用程序时出现错误。也许这是因为我正在使用 Sql Azure?如果我手动创建数据库和表,错误就会得到解决。这是错误消息:

抛出异常:“System.Data.SqlClient.SqlException”在 System.Data.dll

附加信息:无法打开数据库“MyExampleDatabase” 登录请求。登录失败。

用户“ExampleUser”登录失败。

请注意,异常似乎是身份验证失败,但事实并非如此。我验证了凭据和连接字符串是有效的。该应用程序运行良好,并且能够在我手动创建数据库和表后对数据库进行更新。但我希望应用程序能够在运行时自动创建数据库和表(如果它们尚不存在)。

【问题讨论】:

  • 查看 EF6 代码优先和迁移
  • 研究initialisation strategies。最明显的候选者是CreateDatabaseIfNotExists,这实际上是默认行为。
  • ExampleUser 是否具有在所需位置创建数据库的适当权限?
  • 是的,ExampleUser 拥有创建数据库的适当权限。我可以使用此用户的凭据登录到 Sql Server Management Studio 并在那里做同样的事情。

标签: c# sql-server entity-framework entity-framework-6 asp.net-web-api2


【解决方案1】:

确保获得所需内容的最佳方法是将创建与初始化分开。

为了创建数据库,我将使用 Azure REST API 或(如果可以的话)Microsoft.Azure.Management.Sql NuGet 包。使用此 API 创建数据库允许您指定所需的性能级别,这决定了价格。

对于初始化,您可以像往常一样使用 EF

【讨论】:

    【解决方案2】:

    感谢您的反馈。我能够通过使用“数据库中的代码优先”选项(在 Visual Studio 2015 中)重新创建我的 ADO.NET 实体模型来解决该问题。以前,我使用“数据库中的 EF 设计器”选项。显然,为了利用 EF 的这一特性,我需要选择“代码优先”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多