gpt4 book ai didi

.net - 使用 dapper 插入一对多实体

转载 作者:行者123 更新时间:2023-12-03 06:46:47 27 4
gpt4 key购买 nike

我有以下两个类和相应的数据库表。我正在尝试插入完整的对象图(具有多门类(class)的学生)。我正在寻找一个关于如何使用 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)]

学生类(class)
学生 ID [int] (fk)
类(class) ID [int] (fk)

类(class)
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 作为输入参数进行处理,并为集合的每个成员分派(dispatch)多个命令。这允许有效的参数重用。

当然,如果数据库中已经存在图表的某些部分,事情就会变得有点棘手。

关于.net - 使用 dapper 插入一对多实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6771021/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com