我有以下兩個類和相應的數據庫表。我試圖插入完整的對像圖(學生有多個課程)。我正在尋找一個如何使用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;}
}
學生
Id [int](pk)
名稱[varchar(50)]
StudentCourse
StudentId [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重用。
當然,如果數據庫的某些部分已經存在於數據庫中,那麼事情會變得有點棘手。