Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将实体框架通用存储库与web api和多对多关系结合使用_C#_Entity Framework - Fatal编程技术网

C# 将实体框架通用存储库与web api和多对多关系结合使用

C# 将实体框架通用存储库与web api和多对多关系结合使用,c#,entity-framework,C#,Entity Framework,在我的Web API应用程序中,我实现了本文中描述的通用存储库模式。 所以现在每当我创建一个CRUDAPI控制器时,我都会使用一个使用存储库与数据库对话的服务 假设我有两个实体模型 public class Student { public Student() { this.Courses = new HashSet<Course>(); } public int StudentId { get; set; } [Requi

在我的Web API应用程序中,我实现了本文中描述的通用存储库模式。 所以现在每当我创建一个CRUDAPI控制器时,我都会使用一个使用存储库与数据库对话的服务

假设我有两个实体模型

public class Student
{
    public Student() 
    {
        this.Courses = new HashSet<Course>();
    }

    public int StudentId { get; set; }
    [Required]
    public string StudentName { get; set; }
    public virtual ICollection<Course> Courses { get; set; }
}

public class Course
{
     public Course()
     {
        this.Students = new HashSet<Student>();
     }
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public virtual ICollection<Student> Students { get; set; }
}
在前端,每当我向api发送post请求时,如:

/api/Students : Post
{
  "id": 9999,
   "studentName":"string",
   "Courses":[
    {
      "id":13
    }, 
    {
      "id":25
    }]
}
出于某种奇怪的原因,存储库试图创建这两个新课程,尽管它们存在于数据库中,但还是失败了。 如果我将关系更改为一对多,并将帖子更改为只发送一个课程id,如下所示

/api/Students : Post
{
  "id": 9999,
   "studentName":"string",
    "CourseId":13
}
EF将成功保存更改

通过在我的数据库中实例化这两个存储库,我成功地做到了这一点 学生服务,然后从传入的学生模型中获取所有ID 调用courseRepo获取所有课程并覆盖传入的 学生。我从数据库中获取的课程


这很有效,但对我来说,这似乎是一种不好的做法。我认为做这个服务存储库的全部目的是拥有一个干净的后端,类似于微服务体系结构

这种通用存储库模式实现非常幼稚,特别是
Edit
方法在任何EF版本中都不起作用。分离的相关实体需要特别注意。所以,您修复了此问题,但不喜欢您的修复?如果在不影响服务接口的情况下通过更改实现修复了您的服务,那么我认为您刚刚实现了面向组件的体系结构和依赖项注入的承诺(假设您使用它),您应该高兴地走开。架构的“清洁度”是这样来的:它不能保证后端不会有一些丑陋(并且总是会有丑陋,在EF中合并对象图),只是丑陋被包含了,既谨慎又谨慎。是的,我使用依赖项注入,不,我没有更改接口,我只需要将两个存储库注入到我的服务中,而不是一个。这种通用存储库模式实现非常幼稚,特别是
Edit
方法在任何EF版本中都不起作用。分离的相关实体需要特别注意。所以,您修复了此问题,但不喜欢您的修复?如果在不影响服务接口的情况下通过更改实现修复了您的服务,那么我认为您刚刚实现了面向组件的体系结构和依赖项注入的承诺(假设您使用它),您应该高兴地走开。架构的“清洁度”是这样来的:它不能保证后端不会有一些丑陋(并且总是会有丑陋,在EF中合并对象图),只是丑陋被包含了,是的,我使用依赖注入,不,我没有改变接口,我只需要将两个存储库注入到我的服务中,而不是一个。
/api/Students : Post
{
  "id": 9999,
   "studentName":"string",
    "CourseId":13
}