2

在一个测试项目中,我使用 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.`

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

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

4

1 回答 1

4

有两个非常相似的InitializeDatabaseConnection方法,这导致了混乱。

该行:

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

始终需要一个连接字符串名称,该名称必须存在于配置的 appSettings 中。

要专门传入您自己的连接字符串,InitializaDatabaseConnection方法需要传入 6 个参数。第二个参数是提供程序名称。

于 2013-01-11T16:12:27.047 回答