我有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();
这会在多对多表(CourseVideo
)中添加记录,但它也会在Video
表中创建新记录。
如果Video
表已经存在,如何阻止插入?{/ p>
答案 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();
}