c# - 相关表插入数据
问题描述
我有一个小问题。
项目的简短描述:我正在开发一个用 C# 编写的小 API 项目。在这个项目中,我使用的是洋葱架构,简而言之,它类似于 Controller -> Service -> Repository。
我有一个帐户控制器,它管理创建和更新用户,除此之外,我还有一个带有下表的数据库:
User, Password, UserInformation
在User
我有以下列:Id(PK)、用户名和角色。
在Password
我有:User_Id(PK 和 FK 到 User - Id 列)、密码和 oldPassword(如有必要)。
在UserInformation
我有:User_Id(PK 和 FK 到用户 - Id 列)、名字、姓氏和电子邮件。
至于插入数据,我有一个单独的类,里面有字符串常量,里面是查询,我正在执行它们
sqlConnection.QueryAsync(QueryFromStringConstants, etcParams).
由于我对 SQL 语法和一般与 SQL 相关的所有内容(哈哈)有点不熟悉,我的问题是:如果我创建一个User
,如何同时将数据插入到所有 3 个表中?
谢谢 :)
解决方案
每个插入都需要一个单独的插入语句,并且您还应该在每次插入之后获得一个标识值,以便将其用于下一次插入,例如:
- 插入用户:
INSERT INTO User (userName, role) VALUES (...)
- 获取用户 ID(我确定您将其定义为 IDENTITY):
DECLARE @userId AS integer = (SELECT @@IDENTITY);
- 插入用户密码(在前一步获得的用户 ID)
- 插入用户信息(相同)
但您也可以使用实体框架。您应该创建 class User
,它具有类型的虚拟属性Password
和UserInformation
(也应该创建的类)。然后创建一个具有属性的上下文DbSet<User> Users
。在这种情况下,您只需创建一个 User 实例,使用 Password 和 UserInformation 类的对应实例填充其字段 Password 和 UserInformation。然后使用:
context.Users.Add(userInstanceVar);
context.SaveChanges();
就这样!EF 会将所有实例保存到您的数据库中,并自动填充所有标识值。
推荐阅读
- video - 如何将视频从一台远程 PC 流式传输到另一台?(就像它在 Discord 中一样)
- node.js - 如何让用户在nodejs中使用用户名或电子邮件登录?
- c# - 转换错误
- linux - 将用户添加到 ssh 到 Aws Ec2
- wordpress - Wordpress 页面上的移动菜单问题 - 菜单未显示菜单中的链接
- python - 如何遍历所有 Excel 行的给定列?
- docker - Docker 桥接网络已经分配了 MAC,那么 macvlan 是什么?
- c# - EF Core 3.1 - 将标签添加到 IIncludableQueryable 而不更改类型
- c# - 仅在使用“生成单个文件”选项发布时,Newtonsoft.Json 文件未找到异常
- python - 尝试使用 while 循环重复扫描 Discord 机器人中的用户响应但无法正常工作