【问题标题】:Stop EF Database Initialization for DefaultMembershipProvider停止 DefaultMembershipProvider 的 EF 数据库初始化
【发布时间】:2012-06-06 18:55:42
【问题描述】:

团队,我正在部署一个 ASP.NET MVC 应用程序。当我部署它时,应用程序工作正常,但是当我调用Membership.CreateUser 时,它最终会尝试创建数据库,即使它已经存在。由于数据库已经存在,我需要做什么才能使其不会尝试调用CreateMembershipEntities

我已尝试将 Database.SetInitializer 设置为什么都不做的初始化程序,我已尝试删除 Web.config 中的 defaultConnectionFactory - 我目前没有选项。

期待您的帮助!

更新

我昨天才发现它尝试创建数据库的原因是因为主机服务器不允许连接查询sysdatabases,因此数据库从不存在,因此一直在尝试创建它。看来我可能不得不回到老式的 AspNet 会员提供程序,并且也离开 EF 代码优先模型。

【问题讨论】:

  • "我已经尝试将 Database.SetInitializer 设置为什么都不做的初始化程序":禁用 DB 初始化的常规方法是将初始化程序设置为 null,即 @987654327 @。但我不知道这个 EF 的东西与使用存储过程和它自己的连接的 ASP.NET MembershipProvider 有什么关系(除非你以某种方式自定义了提供程序)。如果将初始化程序设置为 null 可以解决问题,我会感到惊讶。
  • @Slauma 我遇到的问题是,当成员表已经存在于生产数据库中时,它正在尝试创建成员表。我在生产服务器上没有 DROP 和 CREATE 数据库访问权限。这里值得注意的另一件事是生产服务器是 GoDaddy,而我使用的成员资格提供程序是它在新的 ASP.NET MVC 4 应用程序中配置的 DefaultMembershipProvider。它在我的开发箱上运行良好。

标签: entity-framework-4.1 asp.net-mvc-4 membership-provider


【解决方案1】:

在这里看看:http://www.qualitydata.com/learn/web-config-membership-provider-settings 它显示了 web.config 的成员资格配置部分。您必须编写一个类似的部分并将 connectionStringName="Your Connection String"。在您的连接字符串中,您指定现有数据库的信息。

【讨论】:

  • 感谢您的回答。让我问你一个简单的问题。我最近发现 - 就像昨天下午一样 - 我遇到这么多麻烦的原因是因为主机服务器不允许连接字符串查询sysdatabases。由于我使用的是 EF 代码优先方法,因此默认成员资格提供程序会尝试验证数据库的存在。我应该回到老式的 AspNet 会员提供商那里吗?它只是不那么干净。
  • 问题的答案是使用 SqlMembershipProvider 而不是 DefaultMembershipProvider。 SqlMembershipProvider 符合成员资格提供程序接口,但像以前一样工作 - 如果数据库不存在,它不会尝试创建数据库。我对每个人的建议是不要首先使用 EF 代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2015-09-27
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多