我正在努力在我的EntityFramework / MVC4 /
DatabaseFirst项目中使用简单的成员方案.我已经找到了很多首先使用代码的例子,但是对于DB来说没什么.
我遇到的问题是InitializeDatabaseConnection抛出一个错误(“无法找到所请求的.Net Framework数据提供程序.它可能没有安装.”)代码如下所示:
WebSecurity.InitializeDatabaseConnection("DALEntities","tblContacts1","ContactID","EMail",autoCreateTables: true);
我不确定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); } }
我在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="data source=SOMECOMPUTER;initial catalog=SOMEDB;persist security info=True;user id=SOMEID;password=SOMEPASS;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> </connectionStrings>
这篇文章似乎是在问同一个问题(但在模型优先的背景下),但还没有解决方案:Using SimpleMembership with EF model-first
另外,我看到WebSecurity.InitializeDatabaseConnection()有一个带有帮助文本的重载:初始化成员资格系统((blah blah< snip> ProviderName:ADO.NET数据提供者的名称.如果你想使用Microsoft建议使用sql Server,WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String,String,Boolean)重载.我确实希望连接到MSsql服务器……这是必需的吗?
解决方法
给您带来麻烦的提供程序是您的连接字符串中指定的那个,即System.Data.EntityClient.我怀疑问题是因为你的项目是数据库优先的,而简单的成员资格是使用代码优先.我认为您不能在单个数据库中混合使用这些方法.尝试将其重新放回到用于IntializeDatabaseConnection的DefaultConnection的位置. MVC4脚手架生成的web.config中应该有一个DefaultConnection.此连接字符串通常使用System.Data.sqlClient作为提供程序.
如果要将简单成员资格保留在用于存储域信息的数据库中(即DALEntities),则需要将在域上使用EF的方法更改为代码优先.如果要保留项目数据库,首先需要在数据库和develop custom member and role providers中设计自己的成员模式.如果您真的想将用户信息集成到域模型中,这可能是最好的方法.