我正在使用asp.net默认会员提供商来创建网站。 我使用了'EF Reverse POCO Generator'并获得了一些内置成员资格表的csharp代码,我删除了一些类,只保留了应用程序,成员资格,配置文件,角色和用户。 问题是我无法使用它们,因为在初始化数据库时会抛出异常。 我遇到的第一个例外是抱怨缺少主键,我在主要字段中添加了[Key]注释,问题解决了。
然后我得到第二个错误似乎抱怨丢失外键:
无法确定类型'GoHome.Models.Memberships'和'GoHome.Models.Users'之间关联的主要结束。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。
看起来可以通过添加[ForeignKey]来解决,但之后我仍然得到第三个,我在谷歌找不到解决方案:
*在表'RolesUsers'上引入FOREIGN KEY约束'FK_dbo.RolesUsers_dbo.Users_Users_UserId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。*
很奇怪,在我看来,根本没有名为'RolesUsers'的桌子。
我只在会员资格和个人资料中分别添加了两个[ForeignKey],导致第三个错误。这是代码:
// 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
}