4

私はMVC3 EFコードファーストアプリケーションをSQLExpress DB上に構築しています。スキーマが変更されたときなどにデータベースが自動的に生成されることは非常に重要です。今では、アプリケーションに認証を追加しています.MVCに付属の認証フレームワークを調べました。しかし、新しいデータベースが生成されるたびにaspnet_regsql.exeを実行する必要があります。認証テーブルがアプリケーションデータベースと同じデータベースに存在する必要があります。MVC3:EFコードファーストと認証

私は基本的に私のオプションが何であるか疑問に思っています。

  • 認証フレームワークを使用し、Entityフレームワークが他のデータを生成するのと同じ方法で自動生成できますか?
  • 私自身が自分の認証を書くことは大丈夫でしょうが、まだ使用できる部分はありますか?言い換えれば、カスタムメンバーシッププロバイダなどを書く必要がありますか?私は属性[認証]などを使い続けたいと思います。

私は正しい方向にいくつかのポインタを使うことができました。

答えて

3

あなたはCodeFirst Membership Provider で開始することができます最初に - それを展開するif必要(サイトで推奨されている使い方も読んでください)。

上記IMOあなたが本当に(および例えば、あなたが直接、例えば、会員テーブルにアクセスする必要がある場合があります場合には、など、独自のユーザー/クライアントテーブルに関連する)は、2つを統合することができるように最善の方法です。

しかし、また、あなたが他のオプションを持っている...

A)https://stackoverflow.com/a/5462981/417747ここに提案しているもののように(自分のDbの初期化子と種子-INGのデータベースを書きます。注意:データベースをDbの初期化子た「ジャム」を使用しますが、ASPNETテーブルなど)や

b)のためのモデルを作成するにASPNETテーブルのSQLスクリプトを実行しているから、様々な手法を利用することができます - とASPNETテーブルを使用して、最初にデータベースを準備

c)(最後は大変ですが)マイグレーションを使用します(@Chrisによって正しく示唆されたとおり)。移行はかなり強力です。 Update-Database -Scriptを実行してDbを変更する代わりにSQLを生成し、それを(aspnetスクリプトまたはseed-edデータベースと組み合わせて)dbの作成または更新に使用することができます。移行にはいくつかの学習が必要ですが、もう少し複雑なものについては努力する価値があります。多分これはデシベル初めて作成するときに「シード」、すなわちに置かオフだけ優れている(または移行は、最初の1である必要があります) - -

希望は、これは

3

DbMigrationsConfigurationのシードメソッドを無効にすることも、移行を作成することもできます。

次に、aspnet_regsql.exeから生成できるSQLを実行するか、アクセス許可がある場合はaspnet_regsql.exeを実行することができます。

UPDATE 1:

次のように私がやってしまった:

Add-Migration AspNetRegSql 

public partial class AspNetRegSql : DbMigration 
{ 
    public override void Up() 
    { 
     Migrate(false); 
    } 

    public override void Down() 
    { 
     Migrate(true); 
    } 

    private static void Migrate(bool down) 
    { 
     var action = down ? "R" : "A"; 
     var connectionstring = ConfigurationManager.ConnectionStrings["DataContext"]; 
     var arguments = string.Format(@"-Q -C ""{0}"" -{1} mrp", connectionstring, action); 

     var processStartInfo = new ProcessStartInfo 
     { 
      WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Replace(@"file:\", string.Empty), 
      FileName = "aspnet_regsql.exe", 
      Arguments = arguments, 
      CreateNoWindow = true, 
      WindowStyle = ProcessWindowStyle.Hidden 
     }; 

     using (var process = Process.Start(processStartInfo)) 
     { 
      process.WaitForExit(); 
     } 
    } 
} 

はその後、私のプロジェクトに "aspnet_regsql.exe" を追加し、 "新しい場合はコピーする" ためのアクションを構築変更しました。

UPDATE 2:

私はNSGagaが掲載さライブラリを認識していませんでした - 私はそれを見ていないが、あなたもそれを考慮することをお勧めします。

UPDATE 3:

いくつかの便利なリンク: - コードに基づいてカスタムプロバイダである

+0

が同様に良く見えるのに役立ちますと理由の可能なパーミッションの問題(これは試していませんが、たとえばカスタムバッチファイルを実行するための非常に良いシナリオと思われます)、つまりよりシンプルな制御PMコンソールは通常PMから開始されます(正直なところ、あるケースではどうしたらうまくいくのか分かりませんが、おそらく動作するはずですが、通常はVSを管理者として実行するので、問題は見られません)。 – NSGaga

関連する問題