Entity Framework 6.2-添加具有DbSet.Include()的子代,但防止DbSet.AddRange()上的子代重复)

问题描述 投票:0回答:1
编辑:

[我知道在将实体从一个DbContext复制到另一个DbContext时如何防止重复,我的问题是关于其子代的。


我有两个上下文:DbContextHDDDbContextUSB,它们都包含一个“数学” Course

DbContextHDD还包含:

    “历史” Course
  • 参加“数学” StudentCourse“西蒙”。
  • 参加“历史记录” StudentCourse“杰克”。
  • 我想将所有Student实体从DbContextHDD复制到DbContextUSB,并且还包括Course中尚不存在的任何DbContextUSB实体:

var students = DbContextHDD.Students.Include(s => s.Courses).ToList(); DbContextUSB.Students.AddRange(students); DbContextUSB.SaveChanges();
这还会将“数学”和“历史记录” Course实体从DbContextHDD复制到DbContextUSB

Students.AddRange之后,我在Course中有两个“数学” DbContextUSB.Courses.Local实体,它们都具有相同的CourseId,而SaveChanges都以SQLiteException: UNIQUE constraint failed失败。

如何避免这种情况?


我正在使用“代码优先”方法。代理创建被禁用:

Configuration.ProxyCreationEnabled = false;

我有很多对很多关系:

public class Student { public Student() { this.Courses = new HashSet<Course>(); } public int StudentId { get; set; } [Required] public string StudentName { get; set; } public virtual ICollection<Course> Courses { get; set; } } public class Course { public Course() { this.Students = new HashSet<Student>(); } public int CourseId { get; set; } public string CourseName { get; set; } public virtual ICollection<Student> Students { get; set; } }

编辑:我知道在将实体从一个DbContext复制到另一个DbContext时如何防止重复,我的问题是关于其子代的。我有两个上下文:DbContextHDD和DbContextUSB,它们都...
c# entity-framework sqlite entity-framework-6 system.data.sqlite
1个回答
0
投票
您是否尝试过应用过滤器?
© www.soinside.com 2019 - 2024. All rights reserved.