ASP.NET核心与外键冲突

时间:2016-11-22 11:01:27

标签: asp.net entity-framework asp.net-core asp.net-identity asp.net-core-mvc

我有几个型号:

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:INSERT语句与FOREIGN KEY冲突   约束&#34; FK_AspNetUsers_Groups_GroupId&#34;。冲突发生在   数据库&#34; aspnet-Project_Dojo-3af15f80-8c62-40a6-9850-ee7a296d0726&#34;,   table&#34; dbo.Groups&#34;,column&#39; Id&#39;。声明已经终止。

在我的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);           
}

我不知道这是做什么的,但是我一直在浏览一些Stackoverflow线程来获取此代码(迁移在没有它的情况下无法正常工作)。

我期待解决我的问题。再一次,我在注册时没有使用groups做任何事情。

提前致谢!

1 个答案:

答案 0 :(得分:4)

  

甚至没有尝试给用户一个群组

那么你的问题就在那里,这是必需的。

提供一个组,或通过使外键可为空(Guid? GroupId)使其成为可选项。

因为它目前是一个不可为空的结构,所以它的默认值为全零(Guid.Empty)。数据库中未知此FK,导致您看到错误。