实体框架6.1.3无法创建数据库

时间:2015-05-21 13:11:21

标签: c# asp.net-mvc entity-framework ef-migrations

我使用实体框架代码优先版本4创建了一个Web应用程序。我需要在安装页面上单击按钮手动创建数据库。我使用下面的代码来实现它。

public class UnitOfWork
{
    private readonly MyDataContext _context;
    public UnitOfWork(MyDataContext context)
    {
        this._context = context;
    }
    private static readonly Object syncObj = new Object();
    public void DbInit(bool force = false)
    {
        lock (syncObj)
        {
            if (_context.Database.Exists()) return;
            System.Data.Entity.Database.SetInitializer<MyDataContext>(new MigrateDatabaseToLatestVersion<MyDataContext, Configuration>());
            _context.Database.Initialize(force);
            ...

        }
    }
}

问题

问题是我更新到Entity Framework 6.1.3并且此代码不再起作用。我现在收到错误: Cannot open database "TesterDB" requested by the login. The login failed. Login failed for user 'sa'.

我的理解

1)我知道系统在不存在时正试图访问数据库。我真的希望在点击按钮时创建数据库,因此,它不会在那时创建。

2)我的凭据是正确的。我使用相同的凭据登录到SQL Management Studio。事实上,凭​​据在创建数据库时起作用。

我迫切需要这个解决方案,因为我的客户目前正在给我施加压力。非常感谢您的帮助。

更新1

我改变了

System.Data.Entity.Database.SetInitializer<MyDataContext>(new MigrateDatabaseToLatestVersion<MyDataContext, Configuration>());

System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<DataContext>());

System.Data.Entity.Database.SetInitializer(new DropCreateDatabaseAlways<DataContext>());

并且错误仍然存​​在。

我也知道用户 sa 可以访问数据库,因为我可以在最终创建数据库时与用户一起访问它。事实上,我创建了另一个用户,问题仍然存在。

更新2

错误发生在_context.Database.Initialize(force);

1 个答案:

答案 0 :(得分:1)

我不认为问题是EF,因为例外是明确的。

SQL数据库引擎上的sa用户有两个常见错误:

  1. 用户不允许登录数据库引擎。 在“用户设置”中启用。
  2. enter image description here

    1. 数据库引擎仅允许Windows登录。 在服务器属性
    2. 中更改它

      enter image description here

      希望它有所帮助!