为什么实体框架试图建立一个已经存在的数据库?

时间:2019-06-13 17:54:00

标签: c# sql entity-framework migration ssms

在我的服务和网站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解决方案并构建它之后,并尝试登录该解决方案正在运行的登录页面之后。因此,这是我本地计算机上的全新解决方案。

1 个答案:

答案 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());
}

最后两行将确保创建数据库及其表(如果尚不存在并与存在的表完全匹配)。