다퍼를 사용하여 하나 또는 여러 개의 엔터티 삽입

.net dapper insert one-to-many sql

문제

두 클래스와 해당 db 테이블을 따릅니다. 전체 개체 그래프 (여러 코스의 학생)를 삽입하려고합니다. Dapper를 사용하여이 작업을 수행하는 방법에 대한 예제를 찾고 있습니다. ID는 자동 증가 ID 필드입니다.

수업

public class Student
{
    public int Id {get;set;}
    public string Name {get;set;}
    public IEnumerable<Course> Courses {get;set;}
}
public class Course
{
    public int Id {get;set;}
    public string Name {get;set;}
}

학생
ID [int] (pk)
이름 [varchar (50)]

학생 코스
학생 ID [int] (fk)
CourseId [int] (fk)

코스
Id [int] (fk)
이름 [varchar (50)]

수락 된 답변

Dapper는이 모든 것을 해결할 일반 도우미가 없습니다 ... 그러나 사소한 경우에는 연결하기가 쉽습니다.

Student student;
// populate student ... 

student.Id = (int)cnn.Query<decimal>(@"INSERT Student(Name) values(@Name)
select SCOPE_IDENTITY()", student);

if (student.Courses != null && student.Courses.Count > 0)
{
   foreach(var course in student.Courses)
   {
      course.Id = (int)cnn.Query<decimal>(@"INSERT Course(Name) values(@Name)
select SCOPE_IDENTITY()", course);
   }
   cnn.Execute(@"INSERT StudentCourse(StudentId,CourseId) 
values(@StudentId,@CourseId)", 
   student.Courses.Select(c => new {StudentId = student.Id, CourseId = c.Id}));
}

이 샘플에 대한 흥미로운 점은 dapper가 IEnumerable을 입력 매개 변수로 처리하고 컬렉션의 각 멤버에 대해 여러 명령을 전달할 수 있다는 것입니다. 이를 통해 효율적인 param 재사용이 가능합니다.

물론, 그래프의 일부가 이미 db에 존재한다면 물건은 약간 까다로워집니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.