Wie bekomme ich die neuesten Werte aus der Datenbank, wenn eine DBUpDateConcurrencyException auftritt?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie bekomme ich die neuesten Werte aus der Datenbank, wenn eine DBUpDateConcurrencyException auftritt?

Post by Anonymous »

Ich habe eine Entitätsperson: < /p>

Code: Select all

public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[ConcurrencyCheck]
public long RowVersion { get; set; }
}
Beim Versuch, Parallelitätsausnahmen zu beheben, gibt die Funktion getDatabaseValuesAsasync () die Werte nicht wie im DB zurück, sondern gibt die ursprünglichen Werte zurück, die den Status des Entität widerspiegeln, wenn sie bei der Entität widerspiegeln, wenn Es wurde geladen. public override async Task SaveChangesAsync(CancellationToken cancellationToken = default)
{
const int retryCount = 3;
for (int i = 0; i < retryCount; i++)
{
try
{
var result = await base.SaveChangesAsync(cancellationToken);
return result;
}
catch (DbUpdateConcurrencyException ex)
{
if (i == retryCount - 1)
{
throw;
}

foreach (var entry in ex.Entries)
{
if (entry.Entity is Person)
{
var proposedValues = entry.CurrentValues;
var databaseValues = await entry.GetDatabaseValuesAsync();
var originalValues = entry.OriginalValues;

if (databaseValues == null)
{
throw new Exception("Person entity was deleted before update.");
}

foreach (var property in proposedValues.Properties)
{
var proposedValue = proposedValues[property];
var databaseValue = databaseValues[property];
var originalValue = originalValues[property];

if (originalValue != proposedValue)
{
proposedValues[property] = proposedValue;
}
else
{
proposedValues[property] = databaseValue;
}
}

// Refresh original values to bypass next concurrency check
entry.OriginalValues.SetValues(databaseValues);
}
else
{
throw new NotSupportedException(
$"Don't know how to handle concurrency conflicts for entity {entry.Metadata.Name}");
}
}

await Task.Delay(50 * (i + 1), cancellationToken);
}
}

return 0;
}
< /code>
Wie erhalte ich die tatsächlichen Werte aus der Datenbank? Oder was könnte das Problem sein?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post