我有几个型号:
course.cs
public class Course
{
public Guid Id { get; set; }
public ICollection<ApplicationUser> Teacher { get; set; }
public string Name { get; set; }
public string ShortName { get; set; }
public DateTime CreationDate { get; set; }
public bool IsActive { get; set; }
}
group.cs
public class Group
{
public Guid Id { get; set; }
public ApplicationUser Mentor { get; set;}
public string DisplayName { get; set; }
public string GroupName { get; set; }
public DateTime StartYear { get; set; }
public string InviteCode { get; set; }
public ICollection<ApplicationUser> Students { get; set; }
public ICollection<Course> Courses { get; set; }
}
applicationuser.cs
public class ApplicationUser : IdentityUser
{
[Required]
public string Firstname { get; set; }
[Required]
public string Surname { get; set; }
public bool Gender { get; set; }
public DateTime Birthdate { get; set; }
//[Required]
public string InviteCode { get; set; }
public Guid GroupId { get; set; }
[ForeignKey("GroupId")]
public Group CurrentGroup { get; set; }
public ICollection<Group> PastGroups { get; set; }
}
现在,当我尝试注册(使用Identity
)用户(甚至没有尝试给用户一个组)时,我会收到此错误:
sqlexception:插入语句与外键冲突 约束" FK_ASPNETUSERS_GROUPS_GROUPID"。冲突发生在 数据库" aspnet-project_dojo-3AF15F80-80-8C62-40A6-9850-EE7A296D0726", 表" dbo.groups",列'id'。该声明已终止。
在我的modelBuilder
中,我为Group
,ApplicationUser
(学生)和外键之间的关系添加了一些逻辑:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);\
builder.Entity<ApplicationUser>()
.HasOne(p => p.CurrentGroup)
.WithMany(b => b.Students)
.HasForeignKey(p => p.GroupId);
}
我不知道这是什么是在做什么,但是我一直在浏览一些堆叠式线程以进入此代码(没有它,迁移就无法正常工作)。
我期待解决我的问题的解决方案。再次,我在注册时还没有使用groups
做任何事情。
预先感谢!
甚至没有试图给用户一个组
好吧,这是您的问题。
提供一个组,或者通过使外键nullable( Guid? GroupId
)。
由于当前是不可删除的结构,因此它将具有所有零的默认值(Guid.Empty
)。该FK在您的数据库中不知道,从而导致您看到的错误。