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 に答える