EF Core保存具有导航属性的实体列表

时间:2018-01-30 11:56:42

标签: c# entity-framework asp.net-core entity-framework-core

我正在使用带有EF Core(2.0)的.Net Core构建WebApi,并在保存实体列表时发现问题。

问题是我的实体中有一个导航属性,例如:

public class Student
{
    public Course Course {get; set;}
}

要保存单个实体,我正在使用它来避免尝试插入已存在的课程:

student.Course = _context.Courses.Attach(student.Crouse).Entity

我觉得它很难看,想知道更好的方法,但它确实有效。有时我允许API接收Students的列表,并且应该将它们全部保存。如果在同一课程中调用两次,则调用Attach会引发异常。

我想要的只是EF Core只使用正确的外键保存Student实体,我不想在数据库中的Course实体中完成任何操作。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

我发现它很难看,想知道更好的方法

是的,有DTO。它们就像我们创建的数据模型一样。

因此,您需要创建一个CreateStudentDto,您将在创建过程中使用它。

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    ...
    //this won't contain the -> public Course Course {get; set;}
}

因此,当您获得输入或将输入从实体类映射到createmodel时,Mapper / Input将自动从您的创建中剥离课程。