在许多不使用Entity Framework的情况下插入记录

露西安·布姆(Lucian Bumb)

我想在其表中插入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。

格特·阿诺德

显然,您正在尝试向Student数据库中添加新内容并将其与现有的 关联Course问题是您将新Course实体附加到上下文而没有适当的主键。

在这里使用所谓的存根实体当然是一个好主意,因为它保存了往返数据库的操作以获取现有的Course,但是EF创建正确的关联记录需要主键。它甚至是您需要在此Course存根中设置的唯一属性

var st1 = new Student() { Name = "Joe" };
var c1 = new Course() { CourseId = 123 };

db.Courses.Attach(c1);
st1.Courses.Add(c1);
db.Students.Add(st1);         

如果要添加新课程和新学生,则应Add同时选择两个:

db.Courses.Add(c1);
st1.Courses.Add(c1);
db.Students.Add(st1);        

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不使用XAML的情况下将换行符插入TextBlock?

来自分类Dev

在不使用Max或Min的情况下,在ms sql中选择每组的前1条记录

来自分类Dev

如何在不使用主键的情况下删除重复记录

来自分类Dev

如何在不使用角色的情况下使用ServiceStack的请求记录器?

来自分类Dev

默认情况下使用WIX启用MSI日志记录

来自分类Dev

ElasticSearch REST-在不使用类的情况下插入JSON字符串

来自分类Dev

如何在不使用[index]的情况下从单个CoreData记录中获取字段(属性)?

来自分类Dev

在不使用插入节点的情况下将HTML粘贴在插入符号中

来自分类Dev

在不使用循环的情况下将多行插入数据库

来自分类Dev

如何在不使用模型的情况下使用Entity Framework执行原始SQL查询?

来自分类Dev

在许多不使用Entity Framework的情况下插入记录

来自分类Dev

如何在不复制的情况下使用Entity Framework插入记录?

来自分类Dev

在不使用ROW_NUMBER()函数的情况下删除重复的记录

来自分类Dev

防止在不使用索引的情况下插入重复项

来自分类Dev

在不使用insert()的情况下将项目插入Python列表

来自分类Dev

如何在不使用Visual Studio的情况下从数据库自动调用Entity Framework的更新

来自分类Dev

在批量插入和更新数据的情况下Entity Framework的工作方式

来自分类Dev

在不使用模型的情况下使用CakePHP获取插入的ID

来自分类Dev

在不使用in语句的情况下更新BIG表中的记录

来自分类Dev

如何在不使用过多内存的情况下链接许多C ++目标文件?

来自分类Dev

在不使用MYSQL计数的情况下查找记录数

来自分类Dev

如何在情况下使用大容量插入

来自分类Dev

如何在不使用任何转换的情况下从ssis中的执行sql任务插入,更新记录?

来自分类Dev

在不使用按钮的情况下更新记录中的单个值?

来自分类Dev

在不使用笛卡尔连接的情况下组合许多 sql 查询的结果

来自分类Dev

如何在不使用 distinct 的情况下显示唯一记录?

来自分类Dev

我们如何在不使用插入子句的情况下插入数据?

来自分类Dev

如何在不使用 try catch 语句的情况下全局记录异常

来自分类Dev

如何在不使用 LAG 功能的情况下访问以前的记录

Related 相关文章

  1. 1

    如何在不使用XAML的情况下将换行符插入TextBlock?

  2. 2

    在不使用Max或Min的情况下,在ms sql中选择每组的前1条记录

  3. 3

    如何在不使用主键的情况下删除重复记录

  4. 4

    如何在不使用角色的情况下使用ServiceStack的请求记录器?

  5. 5

    默认情况下使用WIX启用MSI日志记录

  6. 6

    ElasticSearch REST-在不使用类的情况下插入JSON字符串

  7. 7

    如何在不使用[index]的情况下从单个CoreData记录中获取字段(属性)?

  8. 8

    在不使用插入节点的情况下将HTML粘贴在插入符号中

  9. 9

    在不使用循环的情况下将多行插入数据库

  10. 10

    如何在不使用模型的情况下使用Entity Framework执行原始SQL查询?

  11. 11

    在许多不使用Entity Framework的情况下插入记录

  12. 12

    如何在不复制的情况下使用Entity Framework插入记录?

  13. 13

    在不使用ROW_NUMBER()函数的情况下删除重复的记录

  14. 14

    防止在不使用索引的情况下插入重复项

  15. 15

    在不使用insert()的情况下将项目插入Python列表

  16. 16

    如何在不使用Visual Studio的情况下从数据库自动调用Entity Framework的更新

  17. 17

    在批量插入和更新数据的情况下Entity Framework的工作方式

  18. 18

    在不使用模型的情况下使用CakePHP获取插入的ID

  19. 19

    在不使用in语句的情况下更新BIG表中的记录

  20. 20

    如何在不使用过多内存的情况下链接许多C ++目标文件?

  21. 21

    在不使用MYSQL计数的情况下查找记录数

  22. 22

    如何在情况下使用大容量插入

  23. 23

    如何在不使用任何转换的情况下从ssis中的执行sql任务插入,更新记录?

  24. 24

    在不使用按钮的情况下更新记录中的单个值?

  25. 25

    在不使用笛卡尔连接的情况下组合许多 sql 查询的结果

  26. 26

    如何在不使用 distinct 的情况下显示唯一记录?

  27. 27

    我们如何在不使用插入子句的情况下插入数据?

  28. 28

    如何在不使用 try catch 语句的情况下全局记录异常

  29. 29

    如何在不使用 LAG 功能的情况下访问以前的记录

热门标签

归档