私は、asp.net の既定のメンバーシップ プロバイダーを使用して Web サイトを作成しています。「EF リバース POCO ジェネレーター」を使用して、組み込みメンバーシップ テーブルの csharp コードをいくつか取得し、いくつかのクラスを削除して、アプリケーション、メンバーシップ、プロファイル、ロール、およびユーザーのみを保持しました。問題は、データベースの初期化時に例外がスローされるため、それらを使用できないことです。私が遭遇した最初の例外は、主キーが見つからないという不平です。[Key] 注釈を主フィールドに追加し、問題を解決しました。
次に、外部キーが見つからないという 2 番目のエラーが発生したようです。
タイプ 'GoHome.Models.Memberships' と 'GoHome.Models.Users' の間の関連付けのプリンシパル エンドを特定できません。この関連付けのプリンシパル エンドは、リレーションシップ fluent API またはデータ アノテーションを使用して明示的に構成する必要があります。
[ForeignKey] を追加することで解決できるように見えますが、その後も 3 番目のものを取得しましたが、Google で解決策を見つけることができません:
* テーブル 'RolesUsers' に FOREIGN KEY 制約 'FK_dbo.RolesUsers_dbo.Users_Users_UserId' を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。*
奇妙なことに、私には「RolesUsers」というテーブルがまったくないように見えます。
メンバーシップとプロファイルにそれぞれ [ForeignKey] を 2 つだけ追加したため、3 番目のエラーが発生しました。コードは次のとおりです。
// Memberships
public class Memberships
{
//[ForeignKey("Applications")]
public Guid ApplicationId { get; set; } // ApplicationId
[Key]
[ForeignKey("Users")]
public Guid UserId { get; set; } // UserId (Primary key)
public string Password { get; set; } // Password
public int PasswordFormat { get; set; } // PasswordFormat
public string PasswordSalt { get; set; } // PasswordSalt
public string Email { get; set; } // Email
public string PasswordQuestion { get; set; } // PasswordQuestion
public string PasswordAnswer { get; set; } // PasswordAnswer
public bool IsApproved { get; set; } // IsApproved
public bool IsLockedOut { get; set; } // IsLockedOut
public DateTime CreateDate { get; set; } // CreateDate
public DateTime LastLoginDate { get; set; } // LastLoginDate
public DateTime LastPasswordChangedDate { get; set; } // LastPasswordChangedDate
public DateTime LastLockoutDate { get; set; } // LastLockoutDate
public int FailedPasswordAttemptCount { get; set; } // FailedPasswordAttemptCount
public DateTime FailedPasswordAttemptWindowStart { get; set; } // FailedPasswordAttemptWindowStart
public int FailedPasswordAnswerAttemptCount { get; set; } // FailedPasswordAnswerAttemptCount
public DateTime FailedPasswordAnswerAttemptWindowsStart { get; set; } // FailedPasswordAnswerAttemptWindowsStart
public string Comment { get; set; } // Comment
// Foreign keys
public virtual Applications Applications { get; set; } // MembershipApplication
public virtual Users Users { get; set; } // MembershipUser
}
// Profiles
public class Profiles
{
[Key]
[ForeignKey("Users")]
public Guid UserId { get; set; } // UserId (Primary key)
public string PropertyNames { get; set; } // PropertyNames
public string PropertyValueStrings { get; set; } // PropertyValueStrings
public byte[] PropertyValueBinary { get; set; } // PropertyValueBinary
public DateTime LastUpdatedDate { get; set; } // LastUpdatedDate
// Foreign keys
public virtual Users Users { get; set; } // UserProfile
}