ASP.NET 帮助将数据插入规范化 SQL 表的最佳实践
ASP.NET help inserting data into normalized SQL tables best practice
您好,最常见的情况是将客户订单插入我的 SQL 数据库。我在数据库中创建了一个订单 header 和订单详细信息表,我正在尝试插入一个 header 记录和多个与该 header 记录相对应的详细信息行(PK 和 FK 约束是 headerID)。
目前,我插入我的 header 记录,然后在数据库中查询上次创建的 headerID 并使用该 ID 通过循环遍历网格来插入我的详细信息行。
我知道这是一种将记录插入规范化表的愚蠢方法,而且还进行了额外的 sql 调用,这似乎是不必要的。因此,有谁知道更好的解决这个问题的方法吗?
我发现使用 Entity Framework 解决了这个问题,无需额外努力搜索最后插入的 headerid,然后将其插入到详细信息 table 中。因此,如果 Entity Framework 中的关系定义明确,则框架会负责此过程。例如:
using (var rep = new Repo()){
Header hd = new Header();
hd.name = "some name";
Detail dt = new Detail();
dt.itemname = "some item name";
hd.Details.Add(dt);
rep.Headers.Add(hd);
rep.savechanges();
}
所以只要在rep.savechanges();
master/detail之前的所有操作都完成就会正确插入
但是,如果 EF 发现完整性错误或任何其他错误,则根本不会插入任何数据。
所以这是一种将 master/detail 数据插入 SQL 数据库的好方法。
您好,最常见的情况是将客户订单插入我的 SQL 数据库。我在数据库中创建了一个订单 header 和订单详细信息表,我正在尝试插入一个 header 记录和多个与该 header 记录相对应的详细信息行(PK 和 FK 约束是 headerID)。
目前,我插入我的 header 记录,然后在数据库中查询上次创建的 headerID 并使用该 ID 通过循环遍历网格来插入我的详细信息行。
我知道这是一种将记录插入规范化表的愚蠢方法,而且还进行了额外的 sql 调用,这似乎是不必要的。因此,有谁知道更好的解决这个问题的方法吗?
我发现使用 Entity Framework 解决了这个问题,无需额外努力搜索最后插入的 headerid,然后将其插入到详细信息 table 中。因此,如果 Entity Framework 中的关系定义明确,则框架会负责此过程。例如:
using (var rep = new Repo()){
Header hd = new Header();
hd.name = "some name";
Detail dt = new Detail();
dt.itemname = "some item name";
hd.Details.Add(dt);
rep.Headers.Add(hd);
rep.savechanges();
}
所以只要在rep.savechanges();
master/detail之前的所有操作都完成就会正确插入
但是,如果 EF 发现完整性错误或任何其他错误,则根本不会插入任何数据。
所以这是一种将 master/detail 数据插入 SQL 数据库的好方法。