我有一个遗留的SQL Server数据库,由于许多原因,我无法进行重大更改。两个表之间存在父/子关系。这两个表之间没有外键。子表中还有一个FOR INSERT
触发器,用于检查是否存在父记录。如果没有父记录,则插入因使用raiserror
触发器而失败。
我试图将一些记录添加到父/子表中。我首先在父表中添加一条新记录。然后我在子表中添加多个记录。我通过记录语句验证了订单是否正确。调用DbContext.SaveChangesAsync
方法时,会抛出DbUpdateException
,并在raiserror
中触发相同的错误消息。
问题是首先添加子记录,即使我在代码中首先添加父记录。 有没有办法在不更改数据库的情况下解决这个问题?我意识到目前的数据库设计并不理想,但它超出了我的控制范围。
我可以在插入父级后调用SaveChangesAsync
,但是我放弃了在操作结束时只调用SaveChangesAsync
一次的事务优势。是否有任何其他解决方案可以影响实体框架数据库插入的排序?
答案 0 :(得分:1)
我认为不可能设置独立实体插入的顺序(即没有外键)。这是EF的内部机制。
EF在一次交易中多次调用SaveChanges
没有问题。查看context.Database.BeginTransaction()
或“老式”TransactionScope
。