c# - 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();
});
解决方案
您应该尝试通过键而不是实体来创建新的 CourseKeyword 实例。我是说 :
var key = new CourseKeyword()
{
CourseId = course.Id,
KeywordId = keyw.Id
};
推荐阅读
- ios - 使用 iOS Stringsdict 文件的显式复数字符串
- jsf - 统计primefaces中特定条件的数据表行
- ios - IOS SpriteKit 模糊精灵与 TexturePacker
- python - Python正则表达式替换整个匹配而不是组
- r - 尝试播放音频时权限被拒绝-R
- c - 获取 C 中的进程性能计数器
- reactjs - React 16.13.0 中的延迟加载问题
- php - 调用在另一个文件 php 的函数中创建的 $index
- javascript - 您如何调用覆盖父类方法的方法,因为它不需要该功能
- google-cloud-firestore - 我的 Firestore 帐户有很多读取。我如何从哪里监控?