【发布时间】:2019-08-06 13:51:36
【问题描述】:
我有两个班级:
public class Student
{
public int StudentID { get; set; }
public List<Course> Courses { get; set; }
}
public class Course
{
public int CourseID { get; set; }
public string Name { get; set; }
}
还有一个上下文:
public class DBContext: DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
public DBContext(DbContextOptions<DBContext> options) : base(options) { }
}
课程和学生可以彼此独立存在。换句话说,我可以先创建一个课程,然后再创建一个学生并将其与课程相关联。
例如:
var options = new DbContextOptionsBuilder<DBContext>().UseSqlite("Data Source=.\\test.db;");
Course course = null;
using(var context = new DBContext(options.Options))
{
context.Database.EnsureCreated();
}
using (var context = new DBContext(options.Options))
{
course = context.Courses.Add(new Course { Name = "Algebra" }).Entity;
context.SaveChanges();
}
using (var context = new DBContext(options.Options))
{
var student = context.Students.Add(new Student { Courses = new List<Course> { course } });
context.SaveChanges();
}
但是,在最后一个上下文范围内,我得到一个唯一约束错误。我知道有些人说我需要在同一背景下做所有事情。但这在使用例如 WebAPI 微服务架构(StudentService 和 CourseService)时几乎是不可能的。
那么我该如何处理呢?
【问题讨论】:
标签: insert unique-constraint ef-core-2.0 navigation-properties