Laden...

EntityFramework Core - MySql.Data.EntityFrameworkCore - DbUpdateConcurrencyException

Erstellt von Yeats vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.237 Views
Y
Yeats Themenstarter:in
102 Beiträge seit 2005
vor 6 Jahren
EntityFramework Core - MySql.Data.EntityFrameworkCore - DbUpdateConcurrencyException

Hallo,

Habe eine Frage zu .net core und MySql.Data.EntityFrameworkCore(last stable)
Verwendete
Habe im Prinzip zwei POCO Klassen:


public class A:BaseObject
{
public AGroup Group{get;set;}
}

public class AGroup:BaseObject
{
public ICollection<A> A{get;set;}
public AGroup(){
A=new List<A>();}
}

Diese sind in einer Mapping Klasse auf Ihre jeweiligen die Datenbanktabellen gemappt.

Wenn ich nun in einem Test versuche von AGroup ein Objekt zu schreiben, bekomme ich eine DbUpdateConcurrancyException.

Dazu der Test:


[FACT]
public void CreateTest(){
using(var ctx = new DbContext())
{
var group = new AGroup();
group.Add(new A{...});

Db.AGroups.Add(group);
Db.SaveChanges();
}
}

Suche jetzt schon eine geraume Zeit nach dem Grund. Was ich auf alle Fälle ausschließen kann, es gibt auf der DB keinen Eintrag der identisch wäre. Außerdem ist in keiner verwendeten Klasse ein ConcurrencyToken angegeben. Das Objekt ändert sich zwischen hinzufügen und Speichern nicht. Außerdem konnte ich auch ForeignKey Exceptions ausschließen.

Hat von euch vielleicht jemand diesen Fall schon gehabt und einen Grund dafür gefunden?

T
314 Beiträge seit 2013
vor 6 Jahren

Die Exception sagt doch mehr als nur "DbUpdateConcurrancyException". Was steht denn drin?

Y
Yeats Themenstarter:in
102 Beiträge seit 2005
vor 6 Jahren

Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded.

W
955 Beiträge seit 2010
vor 6 Jahren

Hol dir das SQL welches zur Aktualisierung der DB generiert wird und führe es manuell aus. Du siehst ja dann welche Where-Bedingungen im SQL sind bzw. woran es scheitert (also warum keine Zeile aktualisiert wird)

Y
Yeats Themenstarter:in
102 Beiträge seit 2005
vor 6 Jahren

Wenn ich mir das SQL Statement hole und in der DB absetze, kann ich ohne weiteres hinzufügen.

In der Where Bedingung steht


WHERE ROW_COUNT() = 1
 AND `Id`=LAST_INSERT_ID()