我正在使用 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”的表。
我只在 Memberships 和 Profiles 中分别添加了两个 [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
}