我使用EF Core for SQL Server构建了以下代码,并部署在Azure SQL上。
private async Task BaseIdentityAsync(dynamic payload, string sigfoxId)
{
var crane = await _context.Cranes
.FirstOrDefaultAsync(c => c.SigfoxId == sigfoxId).ConfigureAwait(false);
crane.BLEId = payload.BleId;
crane.Vendor = Specs.GetVendor((int)payload.VendorId);
crane.LastErrorCode = payload.LastErrorCode;
crane.LoadNominalValue = payload.LoadNominalValue;
await _context.SaveChangesAsync().ConfigureAwait(false);
}
现在我将DBContext作为Scoped实例注入控制器。连接到本地SQL服务器时,代码工作正常,但在连接到SQL Azure时无法更新记录(无论是在本地执行还是在云上部署)。
不会抛出任何错误。输出中没有显示任何内容。只需查看_context.SaveChanges()
即可完成API调用,但数据库内部没有任何更新。
如果我直接使用_context直接添加或删除记录,如下所述,那么它可以与本地和Azure SQL完美配合。
_context.AlarmsKPI.Add(new AlarmsKPI
{
AlarmCode = alarmCode,
Device = sigfoxId,
IsOn = true,
Operator = operatorName,
StartedOn = dateTime
});
await _context.SaveChangesAsync().ConfigureAwait(false);
但是,当我拉取一个对象并修改该值然后执行保存更改时,Azure SQL上没有任何反应,但在本地SQL上运行良好。
答案 0 :(得分:1)
我不知道Azure和&之间会有什么区别?本地DB。也许是
var crane = await _context.Cranes
.FirstOrDefaultAsync(c => c.SigfoxId == sigfoxId).ConfigureAwait(false);
不会在本地数据库中返回任何值,但在Azure上它会返回任何值。我假设您需要添加类似的内容才能让EF跟踪更改:
_context.Set<Cranes>().Update(crane);