The instance of entity type 'OptimizerInstanceEntity' cannot be tracked
Can someone help me to update model?
I want to create entity, add it to database and then update only instances
My command doesn't work, I got exception after trying to update:
public sealed record OptimizerSettingsSetsEntity : OptimizerSettingsSets, IIdentityEntity
{
public new string Identity { get => base.Identity; init => base.Identity = value; }
public List<OptimizerInstanceEntity> OptimizerInstances { get; init; } = [];
public DateTime Created { get; init; }
public Guid Id { get; init; }
public DateTime Timestamp { get; init; }
public DateTime? Updated { get; init; }
}
public sealed record OptimizerInstanceEntity : IdentityEntity
{
public required string Url { get; set; }
}
public sealed record OptimizerSettingsSetsEntity : OptimizerSettingsSets, IIdentityEntity
{
public new string Identity { get => base.Identity; init => base.Identity = value; }
public List<OptimizerInstanceEntity> OptimizerInstances { get; init; } = [];
public DateTime Created { get; init; }
public Guid Id { get; init; }
public DateTime Timestamp { get; init; }
public DateTime? Updated { get; init; }
}
public sealed record OptimizerInstanceEntity : IdentityEntity
{
public required string Url { get; set; }
}
protected override async Task UpdateCoreAsync(OptimizerSettingsSetsModel model, EventHandlingContext context)
{
var exists = await FindByIdentityAsync(model.Identity, context);
if(exists == null)
return;
if(!ChangesComparer.HasChanges(exists.ToModel(), model))
return;
var entity = CreateEntity(model, exists);
var entry = dbContext.OptimizerSettingsSets.Update(entity);
await dbContext.SaveChangesAsync(context.CancellationToken);
entry.State = EntityState.Detached;
await eventDispatcher.OptimizerSettingsSetsUpdatedAsync(entity, context);
}
protected override async Task UpdateCoreAsync(OptimizerSettingsSetsModel model, EventHandlingContext context)
{
var exists = await FindByIdentityAsync(model.Identity, context);
if(exists == null)
return;
if(!ChangesComparer.HasChanges(exists.ToModel(), model))
return;
var entity = CreateEntity(model, exists);
var entry = dbContext.OptimizerSettingsSets.Update(entity);
await dbContext.SaveChangesAsync(context.CancellationToken);
entry.State = EntityState.Detached;
await eventDispatcher.OptimizerSettingsSetsUpdatedAsync(entity, context);
}
2 Replies
private OptimizerSettingsSetsEntity CreateEntity(OptimizerSettingsSetsModel model, OptimizerSettingsSetsEntity? entity)
{
return new OptimizerSettingsSetsEntity
{
Id = entity?.Id ?? default,
OptimizerInstances = model.OptimizerInstances?
.Select(m =>
{
var found = dbContext.OptimizerInstances.FirstOrDefault(x => x.Identity == m.Identity);
return new OptimizerInstanceEntity
{
Id = found?.Id ?? default,
Identity = m.Identity,
Url = m.Url
};
}).ToList()!,
OptimizerSettingsParameters = model.OptimizerSettingsParameters?
.Select(op => new OptimizerSettingsParameters
{
Identity = op.Identity,
Value = op.Value,
Description = op.Description
}).ToList()!,
Created = entity?.Created ?? timeProvider.GetUtcNow().DateTime,
Updated = entity == null ? null : timeProvider.GetUtcNow().DateTime,
Identity = model.Identity
};
}
private OptimizerSettingsSetsEntity CreateEntity(OptimizerSettingsSetsModel model, OptimizerSettingsSetsEntity? entity)
{
return new OptimizerSettingsSetsEntity
{
Id = entity?.Id ?? default,
OptimizerInstances = model.OptimizerInstances?
.Select(m =>
{
var found = dbContext.OptimizerInstances.FirstOrDefault(x => x.Identity == m.Identity);
return new OptimizerInstanceEntity
{
Id = found?.Id ?? default,
Identity = m.Identity,
Url = m.Url
};
}).ToList()!,
OptimizerSettingsParameters = model.OptimizerSettingsParameters?
.Select(op => new OptimizerSettingsParameters
{
Identity = op.Identity,
Value = op.Value,
Description = op.Description
}).ToList()!,
Created = entity?.Created ?? timeProvider.GetUtcNow().DateTime,
Updated = entity == null ? null : timeProvider.GetUtcNow().DateTime,
Identity = model.Identity
};
}
what is the full exception?