首页 > 解决方案 > INSERT 语句与 net core 中的 FOREIGN KEY 约束冲突

问题描述

我有 2 张桌子。一个用于课程,另一个用于关键字。这两个表具有多对多关系。所以我把另一张桌子作为CourseKeywords.

public class CourseKeyword
{
    public int CourseId { get; set; }
    public int KeywordId { get; set; }
    public virtual Course Course { get; set; }
    public virtual Keyword Keyword { get; set; }
}

public class Course
{
    [Key]
    public int Id { get; set; }
    [MaxLength(300)]
    public string Title { get; set; }
    [MaxLength(300)]
    public string SubTitle { get; set; }
    public string Body { get; set; }
   
    public ICollection<CourseKeyword> Keywords { get; set; }   

    public Guid Token { get; set; }
    [MaxLength(300)]
    public string Photo { get; set; }
    [MaxLength(300)]
    public string Preview { get; set; }
    public bool IsSpecial { get; set; }
}

public class Keyword
{
    [Key]
    public int Id { get; set; }
    [MaxLength(300)]
    public string Title { get; set; }
    public ICollection<CourseKeyword> CourseKeywords { get; set; }
    public ICollection<BlogKeyword> BlogKeywords { get; set; }
}

当我想添加带有一些新关键字的新课程时。我成功添加了课程。然后添加关键字,但是当我尝试添加CourseKeyword对象时,SaveChange()它显示以下错误:

InnerException = {“INSERT 语句与 FOREIGN KEY 约束“FK_CourseKeywords_Course_KeywordId”冲突。冲突发生在数据库“PandaAcademyNew”、表“dbo.Course”、列“Id”中。\r\n语句已终止。”}

当我想保存更改时会发生这种情况。我的代码在这里:

var course = _db.Course.Find(model.Id);
var keyw = _db.Keywords.Find(keyword.Id);
    
var key = new CourseKeyword()
{
    Course = course,
    Keyword = keyw
};

_db.CourseKeywords.Add(key);
_db.SaveChanges();

这是我的背景OnModelCreating

builder.Entity<CourseKeyword>(courseKeyword =>
{
    courseKeyword.HasKey(ur => new { ur.KeywordId, ur.CourseId });

    courseKeyword.HasOne(ur => ur.Course)
        .WithMany(r => r.Keywords)
        .HasForeignKey(ur => ur.CourseId)
        .IsRequired();

    courseKeyword.HasOne(ur => ur.Keyword)
        .WithMany(r => r.CourseKeywords)
        .HasForeignKey(ur => ur.KeywordId)
        .IsRequired();
});

标签: c#.net-coreentity-framework-core

解决方案


您应该尝试通过键而不是实体来创建新的 CourseKeyword 实例。我是说 :

var key = new CourseKeyword()
{
    CourseId = course.Id,
    KeywordId = keyw.Id
};

推荐阅读