SimpleMembershipInitializer不会初始化

rei*_*den 8 ef-database-first asp.net-mvc-4 simplemembership

我正在努力在我的EntityFramework/MVC4/DatabaseFirst项目中使用简单的成员方案.我已经找到了很多首先使用代码的例子,但是对于DB来说没什么.

我遇到的问题是InitializeDatabaseConnection抛出一个错误("无法找到请求的.Net Framework数据提供程序.它可能没有安装.")代码如下所示:

WebSecurity.InitializeDatabaseConnection("DALEntities", "tblContacts1", "ContactID", "EMail", autoCreateTables: true);
Run Code Online (Sandbox Code Playgroud)

我不确定DataProvider失败了什么.如果我尝试跟踪'into'InitializeDatabaseConnection调用,它会立即抛出错误.

我错过了什么?

信息:
DALEntities是EF其余部分使用的connectionString的名称.以下代码工作正常....

    public ActionResult Test() {
        using (var db = new DALEntities()) {
            var query = from i in db.TBLINVENTORies
                            orderby i.ITEMNAME
                            select i;
            var cnt = query.Count();
            string str = "Total Inventory: " + cnt;
            return Content(str);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在web.config中的连接字符串部分:

  <connectionStrings>
    <add name="DALEntities" connectionString="metadata=res://*/DAL.DAL.csdl|res://*/DAL.DAL.ssdl|res://*/DAL.DAL.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SOMECOMPUTER;initial catalog=SOMEDB;persist security info=True;user id=SOMEID;password=SOMEPASS;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

这篇文章似乎问了同样的问题(但是在模型优先的背景下),但还没有解决方案:使用SimpleMembership和EF模型优先

另外,我看到WebSecurity.InitializeDatabaseConnection()帮助文本有一个重载:Initializes the membership system ((blah blah <snip> ProviderName: the name of the ADO.NET data provider. If you want to use Microsoft SQL Server, the WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String, String, String, String, Boolean) overload is recommended.我确实希望连接到MSSQL服务器......这是必需的吗?

Kev*_*ans 7

给您带来麻烦的提供程序是您的连接字符串中指定的那个,即System.Data.EntityClient.我怀疑问题是因为你的项目是数据库优先的,而简单的成员资格是使用代码优先.我认为您不能在单个数据库中混合使用这些方法.尝试将其重新放回到用于IntializeDatabaseConnection的DefaultConnection的位置.MVC4脚手架生成的web.config中应该有一个DefaultConnection.此连接字符串通常使用System.Data.SqlClient作为提供程序.

如果要将简单成员资格保留在用于存储域信息的数据库中(即DALEntities),则需要将在域上使用EF的方法更改为代码优先.如果要首先保留项目数据库,则需要在数据库中设计自己的成员资格模式,并开发自定义成员和角色提供程序.如果您真的想要将用户信息集成到您的域模型中,这可能是最好的方法.