这几天让我发疯。我正在使用 vs2012,EF5 代码,sql server 2012。这是在我的开发机器上,当并且仅当我第一次访问数据库时,我得到以下异常。如果在我运行测试之前初始化数据库,它会抛出以下异常,但此后不会。如果我运行我的测试,第一个测试会因为这个异常而失败,但我所有的其他测试都通过了。如果我捕捉到异常并忽略它,我的所有测试都会通过而不会出错. 令人沮丧的是,我在这两个表之间定义了约束,但不知道在哪里定义了“Users_Id”。我还尝试手动删除表并从我的 DbContext 运行 vs2012 生成的 sql 以重新创建表,但没有任何效果。任何帮助将非常感激。
这是例外
*System.Data.SqlClient.SqlException: 'FK_dbo.UserProfiles_dbo.Users_Id' 不是约束。无法删除约束。请参阅以前的错误。*
这是我的pocos
用户
public class User : Entity<User>, IUser
{
public Guid Id { get; set; }
// Nav property to UserProfile.
public virtual UserProfile UserProfile { get; set; }
public Guid SiteId { get; set; }
public virtual Site Site { get; set; }
}
用户资料
public class UserProfile : Entity<UserProfile>, IUserProfile
{
// Points to User.Id
public Guid Id { get; set; }
// Nav property back to user.
public virtual User User { get; set; }
}
这是我对这两个表的代码第一个定义(为简洁起见,省略了其他代码):
编辑:两个表之间的关系是 Id User.Id => UserProfile.Id
用户
modelBuilder.Entity<User>().HasKey(p => p.Id);
modelBuilder.Entity<User>().HasRequired(p => p.Site).WithMany(p => p.Users).HasForeignKey(p => p.SiteId);
modelBuilder.Entity<User>()
.HasRequired(p => p.UserProfile)
.WithRequiredPrincipal(p => p.User)
.WillCascadeOnDelete(true);
用户资料
modelBuilder.Entity<UserProfile>().HasKey(p => p.Id);
modelBuilder.Entity<UserProfile>().HasRequired(p => p.User);