在我的域名模型中我有
class School
{
public ICollection<Student> Students { get; set; }
}
class Student
{
public ICollection<Course> Courses { get; set; }
}
class Teacher
{
public ICollection<Course> Courses { get; set; }
}
class Course
{
public Student Student { get; set; }
public Teacher Teacher { get; set; }
}
假设我的数据库中已有学生和教师
学生证= {C26A6D90-6D36-4CE9-9FF0-5C5BAB6994CC}
教师ID = {26ECCCC6-4A24-4FB2-A406-5021B693EE5E}
然后我想创建一门新课程
Course c = new Course(student, teacher);
repo.Add(c);
repo.Save();
基本上,我从数据库中获取记录(Student
&amp; Teacher
),然后尝试使用它们来创建新的关系实体(Course
)
{System.Data.SqlClient.SqlException:违反PRIMARY KEY 约束&#39; PK_Schools&#39;。无法在对象中插入重复键 &#39; dbo.Schools&#39 ;.重复的键值是 (78434ef7-20db-42c8-448e-08d401d04461)。声明一直如此 终止。
这似乎是一个EF7问题......它还不够成熟 - 因为它感觉不像!
答案 0 :(得分:3)
非常感谢CodeNotFound值得获得奖杯......
确保您使用相同的DbContext
所以我在我的服务配置中将AddTransient<,>
更改为AddSingleton<,>
并且hey-presto!它工作!
还要感谢D Stanley这个有用的代码段:
为了对那些没有使用DI的人公平,另一个选择是附加 学生和教师在保存之前反对上下文 课程。 Attach告诉EF该对象已存在于数据库中 并且不应该再次添加。
如果你发现了这个,请不要为那些在你面前的人做好准备!