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

时间:2015-04-26 16:44:54

标签: c# asp.net entity-framework entity-framework-6

我有3个表:VideoCourseCourseVideo。我想插入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();

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

如果Video表已经存在,如何阻止插入?{/ p>

2 个答案:

答案 0 :(得分:0)

要阻止插入Video表(如果已存在),添加的视频必须位于上下文中。您无需为新视频调用savechanges()。

答案 1 :(得分:-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();
}