私は、(暗号化されたパスワードを使用して)古い中途半端なユーザーストアからデフォルトのMSメンバーシップ/ロールプロバイダーに移行するという任務を負っています。私は他のプロジェクトでこれを問題なく行いました。
この場合、「新しい」.NETユニバーサルプロバイダーでコードファーストを使用して必要なテーブルを作成しました。ユーザーテーブルに新しいレコードを挿入しようとしているだけで、壁にぶつかりました。
メンバーシッププロバイダーによって作成された6つのテーブルを持つ単純なedmxがあります。必要なcxn文字列とメンバーシップ/ロールプロバイダー(以下のコード)を指すようにweb.configを設定しました。
Web.Config:
<connectionStrings>
<add name="Test" connectionString="metadata=res://*/Entities.Test.csdl|res://*/Entities.Test.ssdl|res://*/Entities.Test.msl;provider=System.Data.SqlClient;provider connection string="data source=[OurServer];initial catalog=[OurDb];integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="Test" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<add connectionStringName="Test" applicationName="/" name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider" />
</providers>
</roleManager>
これが私の「パスワードの更新」機能です。
System.Web.Security.MembershipCreateStatus status = new System.Web.Security.MembershipCreateStatus();
//Get list of existing users, containing Username & encrypted PW
List<UserMigration.Models.Users> usersList = UserMigration.Models.Users.GetUsers();
foreach (var user in usersList)
{
string password = "";
//We have two encryption methods (bogus I know), so I attempt to decrypt with one, then another, using existing utility functions.
if (!EncryptDecrypt.TryDecryptTripleDES(user.Password, out password))
{
EncryptDecrypt.TryDecrypt(user.Password, out password);
}
//if we got a password, lets party
if (!string.IsNullOrEmpty(password))
{
System.Web.Security.Membership.CreateUser(user.Username, password,string.Empty,null,null,true,out status);
}
}
CreateUserの呼び出しでエラーが発生しましたが、その理由を一生理解できません。エンティティを変更したことはありません。これは単純な汚れである必要があります。エラーは次のとおりです。
Schema specified is not valid. Errors:
The relationship 'TestModel.MembershipEntity_Application' was not loaded because the type 'TestModel.Membership' is not available.
The relationship 'TestModel.RoleEntity_Application' was not loaded because the type 'TestModel.Role' is not available.
The relationship 'TestModel.User_Application' was not loaded because the type 'TestModel.User' is not available.
The following information may be useful in resolving the previous error:
The required property 'Roles' does not exist on the type 'System.Web.Providers.Entities.User'.