c# - 插入/更新多对多 Entity Framework 。我该怎么做?

标签 c# entity-framework many-to-many

我正在使用 EF4 并且是新手。我的项目中有很多,但似乎无法弄清楚如何插入或更新。我已经构建了一个小项目,只是为了看看它应该如何编码。

假设我有3张 table

  1. 类:ClassID-类名
  2. 学生:学号-名字-姓氏
  3. StudentClass : StudentID-ClassID

添加所有关系并通过模型浏览器更新模型后,我注意到 StudentClass 没有出现,这似乎是默认行为。

现在我需要同时进行插入和更新。你怎么做呢?我可以下载示例的任何代码示例或链接,或者您能抽出 5 分钟吗?

最佳答案

就实体(或对象)而言,你有一个 Class 对象,它有一个 Students 的集合,一个 Student 对象有一个的集合。由于您的 StudentClass 表仅包含 ID 而没有额外信息,因此 EF 不会为连接表生成实体。这是正确的行为,也是您所期望的。

现在,在进行插入或更新时,请尝试从对象的角度来思考。例如。如果你想插入一个有两个学生的类(class),创建 Class 对象,Student 对象,将学生添加到类(class) Students 集合中 add将 Class 对象添加到上下文并调用 SaveChanges:

using (var context = new YourContext())
{
    var mathClass = new Class { Name = "Math" };
    mathClass.Students.Add(new Student { Name = "Alice" });
    mathClass.Students.Add(new Student { Name = "Bob" });

    context.AddToClasses(mathClass);
    context.SaveChanges();
}

这将在 Class 表中创建一个条目,在 Student 表中创建两个条目,在 StudentClass 表中创建两个条目将它们链接在一起.

您基本上对更新执行相同的操作。只需获取数据,通过在集合中添加和删除对象来修改图形,调用 SaveChanges。检查this similar question了解详情。

编辑:

根据您的评论,您需要插入一个新的 Class 并向其中添加两个现有的 Students:

using (var context = new YourContext())
{
    var mathClass= new Class { Name = "Math" };
    Student student1 = context.Students.FirstOrDefault(s => s.Name == "Alice");
    Student student2 = context.Students.FirstOrDefault(s => s.Name == "Bob");
    mathClass.Students.Add(student1);
    mathClass.Students.Add(student2);

    context.AddToClasses(mathClass);
    context.SaveChanges();
}

因为两个学生都已经在数据库中,所以不会插入,但是因为他们现在在 ClassStudents 集合中,所以将有两个条目插入到 StudentClass 表中。

关于c# - 插入/更新多对多 Entity Framework 。我该怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4253165/

相关文章:

c# - String.Join 与字符串连接 : Code Improvement

c# - 无法在 Chrome 浏览器上播放 mp4 视频

.net - EF 在 linq 查询中比较格式 "YYYYMMDD"的日期字符串?

asp.net - 如何在 ASP.NET 5 和 EF7 的代码优先方法中设置可选字段

mysql - 使用 n :m-relation 复制数据集

c# - 如何从 SQL Server 缓存一个大表

c# - 如何从 Asp .Net 中的 Active Directory 获取不同的部门名称?

c# - Entity Framework 错误 : An object with a null EntityKey value cannot be attached to an object context

android - ORMLite 多对多关系

python - Django M2M QuerySet 过滤多个外键