【发布时间】:2016-02-27 11:41:34
【问题描述】:
我想在他们的表中插入 2 条新记录,并创建多对多关系。
这个主题有很多问题,我尝试了很多答案,现在我不知道为什么我的代码不起作用。
请帮帮我!
这是代码:
class Program
{
static void Main(string[] args)
{
MyContext db = new MyContext();
var st1 = new Student() { Name = "Joe" };
var c1 = new Course() { Name = "Math" };
db.Courses.Attach(c1);
st1.Courses.Add(c1);
db.Students.Add(st1);
db.SaveChanges();
}
}
public class Student
{
public Student()
{
Courses = new HashSet<Course>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany(p => p.Courses)
.WithMany(d => d.Students)
.Map(t =>
{
t.MapLeftKey("studentId");
t.MapRightKey("courseid");
t.ToTable("StudentCourse");
});
base.OnModelCreating(modelBuilder);
}
}
编辑:像建议的那样,我初始化了课程:
public Student()
{
Courses = new HashSet<Course>();
}
现在我在 db.SaveChanges() 上收到此错误;
保存不为其关系公开外键属性的实体时发生错误。 EntityEntries 属性将返回 null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地处理保存时的异常。有关详细信息,请参阅 InnerException。
【问题讨论】:
-
您的
st1不是 EF 包装器 - 它只是Student类型的对象,并且Student类不会初始化其Courses集合。 -
我怎样才能让它工作?
-
用一些
new List<Student>()或其他东西初始化Courses集合。
标签: c# entity-framework