我有一个标准的 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; }
}
从我读到的所有内容来看,我认为这应该是我需要做的所有事情来让它工作,但我有两个问题:
未加载任何成员表
我的配置似乎抛出了一个错误,即使我引用了WebMatrix.WebData dll
这是配置部分:
<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>
我在这里错过了什么?
据我所知,你错过了
public DbSet<User> User{ get; set; }
在您的上下文类中。您必须为希望Migrations
在数据库中为您创建的每个表执行此操作。
1) 你检查过你的连接字符串吗?应该是这样的:
<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,无客户端版本)
希望这有帮助。