首页 > 解决方案 > 相关表插入数据

问题描述

我有一个小问题。

项目的简短描述:我正在开发一个用 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 个表中?

谢谢 :)

标签: c#sqlsql-server

解决方案


每个插入都需要一个单独的插入语句,并且您还应该在每次插入之后获得一个标识值,以便将其用于下一次插入,例如:

  1. 插入用户:INSERT INTO User (userName, role) VALUES (...)
  2. 获取用户 ID(我确定您将其定义为 IDENTITY):DECLARE @userId AS integer = (SELECT @@IDENTITY);
  3. 插入用户密码(在前一步获得的用户 ID)
  4. 插入用户信息(相同)

但您也可以使用实体框架。您应该创建 class User,它具有类型的虚拟属性PasswordUserInformation(也应该创建的类)。然后创建一个具有属性的上下文DbSet<User> Users。在这种情况下,您只需创建一个 User 实例,使用 Password 和 UserInformation 类的对应实例填充其字段 Password 和 UserInformation。然后使用:

context.Users.Add(userInstanceVar);
context.SaveChanges();

就这样!EF 会将所有实例保存到您的数据库中,并自动填充所有标识值。


推荐阅读