实体框架与现有父母一起插入多对多记录

soc*_*man 5 c# asp.net entity-framework entity-framework-6

我有3个表:Video,Course,和CourseVideo.我想插入CourseVideo.

Video可能或不可能有一个现有的记录,但是当它想利用现有的记录并不能创造一个新的纪录.

我的代码看起来像这样:

var video = db.Videos.SingleOrDefault(c => c.Link.Equals(link));

if(video == null)
{
    video = new Video { ... };
    db.Videos.Add(video);
    db.SaveChanges();
}

var course = db.Courses.Include("Videos").Single(c => c.ID == courseID);
course.Videos.Add(video);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这会在多对多表(CourseVideo)中添加一条记录,但它也会在Video表中创建一条新记录.

Video如果已经存在插入到表中,如何防止插入?

Ste*_*ndl -1

默认情况下,EF 不会检查 N:M 关系的条目是否存在。

您应该将您的课程更改放在if语句中:

var video = db.Videos.SingleOrDefault(c => c.Link.Equals(link));

if(video == null)
{
    video = new Video { ... };
    db.Videos.Add(video);
    db.SaveChanges();
    var course = db.Courses.Include("Videos").Single(c => c.ID == courseID);
    course.Videos.Add(video);
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)