在我的服务和网站Web.config
文件中,我都有以下连接字符串:
<connectionStrings>
<add name="MyDBConnect" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=MyDB;User Id=tester;Password=abc123*123;" providerName="System.Data.SqlClient" />
</connectionStrings>
我手动运行了数据库构建脚本,并在SSMS UI中进行了确认:(LocalDB)\ MSSQLLocalDB(SQL Server 13.0.40001-8Protons)>数据库> MyDB
在运行项目并进入登录屏幕时,在以下位置引发异常:
var entity = GetAll().Include(p => p.Role).FirstOrDefault(p => p.Email == userName && p.Password == encryptedPassword && p.IsActive);
并显示以下消息
类型为'System.Data.SqlClient.SqlException'的异常发生在 EntityFramework.dll,但未在用户代码中处理 信息:数据库'MyDB'中的CREATE TABLE权限被拒绝。
为什么解决方案尝试在表已经存在时创建表?所以我去的表是SSMS,并提升了此用户创建表的权限。现在抛出的错误是:
类型为'System.Data.SqlClient.SqlException'的异常发生在 EntityFramework.dll,但未在用户代码中处理 信息:在该对象中已经有一个名为“ MyTable”的对象 数据库。
对于上下文,这是在我克隆了某个人的EF解决方案并构建它之后,并尝试登录该解决方案正在运行的登录页面之后。因此,这是我本地计算机上的全新解决方案。
答案 0 :(得分:0)
查看数据库上下文的构造函数。例如,
public MyDBContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
this.Database.CommandTimeout = 60;
IDatabaseInitializerCreator creator = new DatabaseInitializerCreator();
Database.SetInitializer(creator.Create());
}
最后两行将确保创建数据库及其表(如果尚不存在并与存在的表完全匹配)。