问题描述
由于性能上的优势,我通过执行原始sql命令来插入数据。 所有数据均已正确插入数据库,但存储库不知道它们已插入。基本上, usersBeforeInsert 和 usersAfterInsert 包含相同的3条记录。
此外,在应用程序重新启动后,存储库仍不知道使用ExecutesqlRaw()插入的用户,仅检索ExecutesqlRaw()之前存在的用户。
有人知道如何使_userRepository从db检索所有数据吗?顺便说一句,我正在使用asp.net样板项目。
下面是代码示例:
var usersBeforeInsert = await _userRepository.GetAllListAsync(); // 3
var commandText = GenerateInsertUseRSSqlScript(users);
var context = _userRepository.GetDbContext();
var rowsAffected = context.Database.ExecutesqlRaw(commandText); // 85000
context.SaveChange()
var usersAfterInsert = await _userRepository.GetAllListAsync(); // 3
解决方法
您的罪魁祸首是此行
var usersBeforeInsert = await _userRepository.GetAllListAsync();
因为该框架假定此行和此行之间没有任何变化
var usersAfterInsert = await _userRepository.GetAllListAsync();
您可以通过在原始插入之后才调用列表来解决此问题,或者可以清除更改集。
清除变更集的最简单方法是建立一个新的_userRepository,但我想它很有可能被注入。