部署带Identity的ASP.NET MVC 5站点时出现异常数据库行为
解决方案
1. 禁用Entity Framework自动数据库初始化
ASP.NET MVC 5默认的EF初始化逻辑会尝试自动创建数据库,哪怕你已经手动导入了架构。修改方式二选一:
- 在你的
ApplicationDbContext(身份验证默认的DbContext类)构造函数里添加:
public ApplicationDbContext() : base("你的连接字符串名称") { Database.SetInitializer<ApplicationDbContext>(null); }
- 或者在
Global.asax.cs的Application_Start方法中添加:
Database.SetInitializer<ApplicationDbContext>(null);
这样就能彻底关掉EF自动创建/初始化数据库的行为。
2. 核对Web.config连接字符串
确保连接字符串精准指向你已经导入的数据库,别用默认的LocalDB或者需要新建的库:
<connectionStrings> <add name="DefaultConnection" connectionString="Server=主机SQL实例地址;Database=你已导入的数据库名;User ID=数据库账号;Password=数据库密码;" providerName="System.Data.SqlClient" /> </connectionStrings>
重点检查:
Database字段必须是你手动导入的数据库名称- 账号密码要拥有该数据库的读写权限(不需要建库权限)
- 服务器地址要和共享主机提供的SQL实例地址一致
3. 检查身份验证初始化代码
如果用了ASP.NET Identity,排查IdentityConfig.cs里的ApplicationUserManager初始化逻辑,确保没有触发数据库创建的代码。
4. 同步迁移历史表
如果之前开了Code First迁移,把本地的__MigrationHistory表数据导出导入到远程数据库,让EF认为迁移已完成,不会再执行包含建库的迁移操作。
5. 确认数据库权限
给你的数据库账号分配db_owner权限,或者至少ddl_admin+db_datawriter+db_datareader权限,保证能在现有库内操作表和数据。
错误堆栈参考:
System.Data.SqlClient.SqlException (0x80131904): CREATE DATABASE permission denied in database 'master'. at System.Data.SqlClient.SqlConnection.OnError
内容的提问来源于stack exchange,提问作者JaggenSWE
相关产品推荐
相关产品推荐

