ASP.NET核心与外键冲突



我有几个型号:

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中,我为GroupApplicationUser(学生)和外键之间的关系添加了一些逻辑:

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在您的数据库中不知道,从而导致您看到的错误。

相关内容

  • 没有找到相关文章

最新更新