2013-02-26 52 views
1

我有一些简单的DbContext:ASP.NET MVC 4 WebSecurity种子

public class AuthContext : DbContext 
{ 
    public AuthContext() : base("AuthContext") 
    { 
    } 

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

和简单的用户模型:

[Table("User")] 
public class User 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 

    public string Login { get; set; } 
} 

我需要的是总是或模型创建后播种数据WebSecurity。我曾尝试:

Database.SetInitializer(new AuthDbSeeder()); 

// ------------------------------------- -------------------

<add name="AuthContext" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=ChatAuth; Integrated Security=SSPI; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 

<system.web>我说:

<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 class AuthDbSeeder : DropCreateDatabaseAlways<AuthContext> 
{ 
    protected override void Seed(AuthContext context) 
    {  
     WebSecurity.InitializeDatabaseConnection("AuthContext", "User", "UserId", "Login", 
                 autoCreateTables: true); 
     WebSecurity.CreateUserAndAccount("Sergey", "1234"); 

但毕竟我有错误,数据库不能因为它已被使用而被放弃。我需要一些工作方法为WebSecurity创建数据。 对我来说对我来说同样重要的是:我如何可以将我的自定义模型添加到相同的DbContext中,并将种子数据正确地添加到此上下文中。

还有任何想法我可以单元测试WebSecurity?

回答

-1

我已经找到了种子问题

的解决方案,我返工SimpleMembershipInitializer:

 private class SimpleMembershipInitializer 
     { 
      public SimpleMembershipInitializer() 
      { 
       try 
       { 
        WebSecurity.InitializeDatabaseConnection("AuthContext", "User", "UserId", "Login", 
                  autoCreateTables: true); 
       } 
       catch (Exception ex) 
       { 
        throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); 
       } 
      } 
     } 

在我的种子的方法调用

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     LazyInitializer.EnsureInitialized(ref initializer, ref isInitialized, ref initializerLock); 
    } 

用null作为参数。

单元测试仍然是一个问题