找不到连接字符串WebSecurity.IntializeDatabaseConnection

时间:2013-01-11 13:04:45

标签: c# entity-framework ef-code-first entity-framework-5

在测试项目中,我正在使用SimpleMembershipProvider和Entity Framework 5.测试项目使用localdb创建一个数据库,并且它突然停止工作。我不确定是什么改变了,但我很难过。这几乎是样板:

    private static void InitializeSimpleMembership()
    {
        Database.SetInitializer<TestEfhContext>(null);
        using (var context = new TestEfhContext(ConnectionString))
        {
            if (!context.Database.Exists())
            {
                // Create the SimpleMembership database without Entity Framework migration schema
                ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
            }

            WebSecurity.InitializeDatabaseConnection(ConnectionString, "Users", "UserID", "UserName", autoCreateTables: true);

        }           
    }

ConnectionString不是app.config中的密钥时,应该创建该名称的数据库,并为用户模型初始化它。如果localdb数据库尚不存在,则会成功创建。 WebSecurity.InitializeDatabaseConnection现在失败

`Connection string "testdb" was not found.`

在排除故障时,我尝试更改连接字符串以使用实际连接sting而不是别名:

WebSecurity.InitializeDatabaseConnection(context.Database.Connection.ConnectionString,
   "Users", "UserID", "UserName", autoCreateTables: true);

这解析为localdb服务器的完整连接字符串:

Data Source=(localdb)\\v11.0;Initial Catalog=testdb;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE'

我认为这至少会起作用。不是这样:

Connection string "Data Source=(localdb)\v11.0;Initial Catalog=testdb;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE" was not found.

有什么想法吗?这是我使用EF的第一个项目,因此其中一些对我来说仍然有点神秘。当我第一次设置测试项目时,它就像魔术一样,我无法理解可能发生的变化。初始化程序甚至不能使用真正的连接字符串,这似乎特别奇怪。实际的应用程序仍然可以正常工作,我现在无法让测试项目正常工作。

1 个答案:

答案 0 :(得分:4)

有两种非常相似的 InitializeDatabaseConnection 方法,这引起了混淆。

该行:

WebSecurity.InitializeDatabaseConnection(context.Database.Connection.ConnectionString,
   "Users", "UserID", "UserName", autoCreateTables: true);

始终期望配置的appSettings中的必须存在的连接字符串名称。

要专门传入您自己的连接字符串, InitializaDatabaseConnection 方法需要传入6个参数。额外参数排在第二位,是提供者名称。