Ani*_*Ali 10 .net sql insert one-to-many dapper
我有以下两个类和相应的数据库表.我试图插入完整的对象图(学生有多个课程).我正在寻找一个如何使用Dapper来做这个的例子.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;}
}
Run Code Online (Sandbox Code Playgroud)
学生
ID [int](pk)
姓名[varchar(50)]
StudentCourse
StudentId [int](fk)
CourseId [int](fk)
课程
ID [int](fk)
姓名[varchar(50)]
Sam*_*ron 13
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}));
}
Run Code Online (Sandbox Code Playgroud)
关于这个示例的一个有趣的注意事项是,dapper能够将IEnumerable作为输入参数处理,并为集合的每个成员分配多个命令.这允许有效的param重用.
当然,如果数据库的某些部分已存在于数据库中,那么事情会变得有点棘手.