【发布时间】:2012-08-25 15:59:01
【问题描述】:
我正在学习 Entity Framework 中可用的迁移功能,但我似乎遇到了问题。当使用互联网应用程序项目模板并启用实体框架迁移等时。我试图在数据库上创建一个默认用户 - 使用自动迁移:
protected override void Seed(eManager.Web.Infrastructure.DepartmentDb context)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "Email", false);
if (!WebSecurity.UserExists("ahicks2"))
{
WebSecurity.CreateAccount("ahicks2", "password", requireConfirmationToken:true);
}
if (!Roles.RoleExists("Admin"))
{
Roles.CreateRole("Admin");
}
}
当我在包管理器中运行“Update-Database -verbose”时,出现以下错误:
运行种子方法。 System.Web.Security.MembershipCreateUserException:提供程序遇到未知错误。
在 WebMatrix.WebData.SimpleMembershipProvider.CreateAccount(String 用户名、字符串密码、布尔型 requireConfirmationToken) 在 WebMatrix.WebData.WebSecurity.CreateAccount(String userName, String password, Boolean requireConfirmationToken)
堆栈跟踪中的下一行是Configuration.Seed 调用。在我的网络配置中,我使用以下成员资格提供程序设置来保证在我想要的数据库中创建表:
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<clear/>
<add name="DefaultMembershipProvider"
type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
connectionStringName="DefaultConnection"/>
数据库表正在正确创建,但代码落在创建用户身上。任何人都可以帮忙吗?我敢肯定它很简单。我想测试这些功能——当然,一个简单的答案是恢复使用来自 asp.net 2.0 的会员提供程序!但我想尝试让它发挥作用。任何帮助将不胜感激。
编辑:顺便说一句,我试过这个:http://forums.asp.net/t/1598261.aspx/1 并没有解决这个问题。
【问题讨论】:
-
可以直接在VisualStudio中创建用户吗?
-
如果您指的是运行项目并创建基本模板的新用户。不,我得到了同样的例外。只是一个不同的方法调用。
-
您是否运行了准备程序 apsnetregsql.exe?这可能不是确切的名称,而是类似的名称。
-
不,只是将相关表注册到数据库中。 EF 代码首先根据默认设置或在您首次使用 Web 安全代码时的配置创建必要的表。我什至没有走那么远 - 当它尝试使用默认成员资格提供程序时它失败了,因为它认为它没有扩展作为 WebMatrix.WebData 程序集一部分的扩展成员资格提供程序。
-
这是一个链接,其中包含用户、角色的种子并将两者与 EF5 CodeFirst http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/
标签: asp.net .net entity-framework-4 membership visual-studio-2012