1

我有一些简单的 DbContext:

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 进行单元测试?

4

2 回答 2

0

这里有一个关于如何播种和自定义 WebSecurity 的示例

于 2013-02-27T15:54:45.813 回答
-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 作为参数。

单元测试仍然是个问题

于 2013-02-27T15:27:47.987 回答