您好我最常见的情况是将客户订单插入我的SQL数据库。我在db中创建了一个订单头和订单明细表,我试图插入一个头记录和与该头记录对应的多个明细行(PK和FK约束是headerID)。
目前,我插入我的标题记录,然后在db中查询最后创建的headerID,并使用该ID通过循环遍历网格来插入我的详细信息行。
我知道这是将记录插入规范化表格的愚蠢方式,并且进行了额外的sql调用,这似乎是不必要的。因此,任何人都会知道这个问题的更好解决方案。
答案 0 :(得分:0)
我发现使用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();
主/明细数据之前完成所有操作。
但是,如果EF发现完整性错误或任何其他错误,则根本不会插入任何数据。
所以这是将主/详细数据插入SQL数据库的一种很好的简洁方法。