EF Core 2对象未附加到上下文

时间:2018-02-13 20:49:10

标签: c# entity-framework-core azure-sql-database ef-core-2.0

我使用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上运行良好。

1 个答案:

答案 0 :(得分:1)

我不知道Azure和&之间会有什么区别?本地DB。也许是

var crane = await _context.Cranes
    .FirstOrDefaultAsync(c => c.SigfoxId == sigfoxId).ConfigureAwait(false);

不会在本地数据库中返回任何值,但在Azure上它会返回任何值。我假设您需要添加类似的内容才能让EF跟踪更改:

_context.Set<Cranes>().Update(crane);