SimpleMembershipProvider不向我的数据库添加表

时间:2012-11-27 04:13:22

标签: asp.net entity-framework asp.net-mvc-4 ef-code-first simplemembership

我有一个标准的ASP.NET MVC4应用程序,我正在使用EF Code First构建DAL。目前有大约20-30个模型,我正处于我想要整合用户和角色的地步。我已经研究了这一点,似乎仍然无法让它发挥作用。这就是我现在所拥有的:

在我的数据库初始化类(每次更改模型时都调用了)我用一堆数据播种它,然后调用它:

public class DbInit : DropCreateDatabaseIfModelChanges<TrackerContext>
{
    protected override void Seed(TrackerContext context)
    {
      ...seed stuff and save it...
      WebSecurity.InitializeDatabaseConnection("TrackerContext", "User", "Id", "UserName", autoCreateTables: true);
    }
}

通过调试它不会抛出任何错误,我可以确认它正在触及这行代码。我的用户模型如下所示:

public class User
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
    public PasswordQuestion PasswordQuestion{ get; set; }
    public string PasswordAnswer { get; set; }
    public string Type { get; set; }
}

从我读过的所有内容中,我认为这应该是我需要做的全部工作,但我有两个问题:

  1. 没有加载会员资格表

  2. 即使我引用了WebMatrix.WebData dll,我的配置似乎也在抛出错误

  3. 以下是配置部分:

    <roleManager enabled="true" defaultProvider="SimpleRoleProvider">
      <providers>
        <clear/>
        <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
      </providers>
    </roleManager>
    <membership defaultProvider="SimpleMembershipProvider">
      <providers>
        <clear/>
        <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
      </providers>
    </membership>
    

    我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

1)您检查了ConnectionString吗?应该是这样的:

 <connectionStrings>
    <add name="DefaultConnection" connectionString="data source=SERVER;initial catalog=DATABASE;user id=USER;password=PASSWORD;" providerName="System.Data.SqlClient" />
</connectionStrings>

此外,您也应该在配置中使用此功能:

 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>

2)检查你的参考文献。 System.Web.Webpages应该在那里,CopyLocal应该设置为true。然后检查您的.NET Framework版本(4.0,没有客户端版本)

希望这有帮助。

答案 1 :(得分:0)

据我所知,你错过了

public DbSet<User> User{ get; set; }

在您的上下文类中。您需要为数据库中Migrations为您创建的每个表执行此操作。