【问题标题】:Problems with ASP.Net Membership and Entity Framework Migrations using .NET 4.5使用 .NET 4.5 的 ASP.Net 成员资格和实体框架迁移问题
【发布时间】: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 程序集一部分的扩展成员资格提供程序。

标签: asp.net .net entity-framework-4 membership visual-studio-2012


【解决方案1】:

答案就在表面上。 查看有关此方法的 MSDN 页面: WebSecurity.CreateAccount Method

它假定用户配置文件表中已经存在匹配的用户信息(由用户名表示)。 (要在成员资格表和用户个人资料表中创建新用户,请使用 CreateUserAndAccount(String, String, Object, Boolean) 方法。)

【讨论】:

    【解决方案2】:

    这对我有用:

    WebMatrix.WebData.WebSecurity.CreateUserAndAccount("YOURUSERNAME", "YOURPASSWORD");
    

    您可能还希望考虑确保控制器/类具有

    [InitializeSimpleMembership]
    

    我正在尝试做和你类似的事情并且在苦苦挣扎!

    我创建角色失败了。

    丹。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多