以前は、コードファーストを使用してテーブルを作成するときに、データベース初期化子を使用してテーブルをシードまたは事前に入力しました。これはすごくうまくいったが、私はEF 4.3の移行を使いたいと思った。Entity Framework Migrationsを使用してユーザーテーブルにユーザーアカウントを作成するにはどうすればよいですか?
私のプロジェクトでEF 4.3に更新され、データベース初期化コードが削除され、移行のConfiguration.csファイルのSeedメソッド内に配置されました。これは、デフォルトのユーザーを自分のユーザーテーブルにシードしたい場合を除いて、私のテーブルをあらかじめ準備しておくことで、うまく動作します。
// create default User
MembershipCreateStatus status = new MembershipCreateStatus();
User admin = context.Users.Find("TestGuy");
if (admin == null)
{
Membership.CreateUser("TestGuy", "TestGuy123", "[email protected]");
if (status == MembershipCreateStatus.Success)
{
admin.Firstname = "Test";
admin.Surname = "Guy";
admin.DateLastActivity = DateTime.Now;
admin.LastActivityRoute = "/Home/Index";
Role adminRole = context.Roles.Find("Administrator");
admin.Roles = new List<Role>();
admin.Roles.Add(adminRole);
}
}
- (したがって、ユーザ名のチェック現在、これは私がこのような状況のためにそれを使用するかどうかはわかりませんようAddOrUpdateコードを使用していません):
は、私は私の種子メソッド内で、次のコードを使用します私がしようとするとアップデート・データベースを実行すると、私はこのエラーを取得:
The password-answer supplied is invalid.
私はこれがちょうどダウン私がでCreateUserを呼ぶが、私はこのバグを回避する方法を動作するように見えることはできませんどのようにだと思います。私はセキュリティの質問と回答のためだけにnullを入れてみましたが、うまくいかないようです。
「AddOrUpdate」オプションを使用してユーザーにシードを渡す例はありますか?
EDIT 1:以下のコメントの1を1として
、私は私のメンバーシップを管理するためにAltairisセキュリティToolkitを使用しています。次のように私のweb.configファイルには、セットアップです:
<membership defaultProvider="TableMembershipProvider">
<providers>
<clear />
<add name="TableMembershipProvider" type="Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security" connectionStringName="DataContext" minRequiredPasswordLength="8" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" minRequiredNonAlphanumericCharacters="0" passwordStrengthRegularExpression="" />
</providers>
</membership>
EDIT 2:
私もAltairisのフォーラムでオープンチケットとしてこれを入れています。 http://altairiswebsecurity.codeplex.com/workitem/32273
EDIT 3:
次のように私はセットアップに私のコードを持っていたすべてのエラーなしでこの作業を取得するには、次の
// create default User
MembershipCreateStatus status = new MembershipCreateStatus();
User admin = context.Users.Find("TestGuy");
if (admin == null)
{
Membership.CreateUser("TestGuy", "TestGuy123", "[email protected]", null, null, true, out status);
if (status == MembershipCreateStatus.Success)
{
admin = context.Users.Find("TestGuy");
admin.Firstname = "Test";
admin.Surname = "Guy";
admin.DateLastActivity = DateTime.Now;
admin.LastActivityRoute = "/Home/Index";
Role adminRole = context.Roles.Find("Administrator");
admin.Roles = new List<Role>();
admin.Roles.Add(adminRole);
}
}
上記アップデート・データベースを実行しているときに、今コンパイルされますがありません新しいユーザーが生成されます。もし誰かがそれを試してみると良いだろう!
おかげで、
リッチ
フィードバックいただきありがとうございます。それが関連しているかどうかはわかりませんでしたが、Altairis Security Toolkitを使用して、デフォルトのMembershipテーブルの代わりに自分のUserテーブルを使用できるようにしています。私はrequireQuestionAndAnswer = "false"をweb.configにも設定していますので、少し戸惑ってしまいます。 –