【发布时间】: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