如何修复Argument错误无法从DbApproachFirst.Course转换为DbApproachFirst.COURSE?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (4)

我在家庭作业项目中使用Linq到SQL类,我试图将记录插入到多对多表中。问题是,即使使用实体框架插入或Linq I我尝试的所有内容都无法实现。

我先试过这个方法

    using(DataClassesDataContext context = new DataClassesDataContext())
     {

    var student = context.STUDENTs.Where(st => st.STUDENT_ID == 101).Single();

    var course = context.COURSEs.Where(co => co.COURSE_ID == 4).Single();

    student.STUDENT_PER_COURSEs = course;

    context.SubmitChanges();

    }

和它的说法:

无法转换type.COURSESystem.Data>EntitySet

我也试过这种方法:

 Course newCourse = new Course { C_Name = "Math" };//assumption
    newCourse.Students.Add(new Student
     {
      St_First_Name = newStudentFirstName,
      St_Last_Name = newStudentLastName,
      St_Tuition = newStudentTuition,
      St_Date_of_Birth = dateBirthDate
     });                                                        
    db.COURSEs.InsertOnSubmit(newCourse);
    db.SubmitChanges();

但我得到:

参数错误无法转换'<ProjectName>.Course'<ProjectName>.COURSE

这是数据库表名。

     public class Course
    {
        public int Course_Id { get; set; }
        public string C_Name { get; set; }
        public string C_Stream { get; set; }
        public string C_Type { get; set; }
        public DateTime C_Start_Date { get; set; }
        public DateTime C_End_Date { get; set; }
        public int Trainer_id { get; set; }

        public virtual IList<Assignment> Assignments { get; set; }
        public virtual Trainer Trainer { get; set; }
        public virtual IList<Student> Students { get; set; }
        public virtual IList<Day> Days { get; set; }

        public Course()
        {
            Assignments = Assignments;
            Students = Students;
            Days = Days;
        }

    }

    public class Student
    {
        public int Student_id { get; set; }
        public string St_First_Name { get; set; }
        public string St_Last_Name { get; set; }
        public int St_Tuition { get; set; }
        public DateTime St_Date_of_Birth { get; set; }
        public int UserId { get; set; }

        public virtual UserDetails UserDetails { get; set; }
        public virtual IList<Assignment> Assignments { get; set; }
        public virtual IList<Course> Courses { get; set; }

        public Student()
        {
            Assignments = Assignments;
            Courses = Courses;

        }
    }

我可以使用存储过程来CRUD这个多对多表,但我想尝试Linq。

提问于
用户回答回答于

看起来你的课程课程有一个没有参数的构造函数。试试这个。

     public Course(Assignment _assignment, Student _student, Day _day)
    {
        Assignments = _assignment.ToList();
        Students = _student.ToList();
        Days = _day.ToList();
    }

此外,数据库不知道您要插入的内容。newCourse里面发生了很多事情。列表和构造函数......您只需插入一个简单的模型即可

db.COURSEs.InsertOnSubmit(newCourse);

虽然您的类是从数据库中检索数据的好方法(您可以使用Linq组织嵌套对象和属性),但是当涉及将数据插入数据库时​​......您需要保持简单。仅使用值传递严格的列名。无论什么专栏都在COURSE中,您的模型课程需要。不多也不少。

扫码关注云+社区

领取腾讯云代金券