Lösen Sie das Problem „Entitätsobjekte werden von mehreren IEntityChangeTracker-Instanzen referenziert“ in Entity Framework 4.1
Beim Speichern einer Entität, die einen Entitätsverweis mit Entity Framework 4.1 enthält, kann die Ausnahme „Das ADO.Net Entity Framework-Entitätsobjekt kann nicht von mehreren IEntityChangeTracker-Instanzen referenziert werden“ auftreten. Diese Ausnahme tritt normalerweise auf, wenn mehrere Entity Framework-Kontexte dieselbe Entität verwalten.
Im Codeausschnitt erstellen beispielsweise die beiden Serviceklassen EmployeeService
und CityService
jeweils ihre eigenen Kontextinstanzen. Wenn eine city1
-Entität von CityService
abgerufen wird, wird sie an den Kontext von CityService
angehängt. Wenn später die Mitarbeiterentität e1
erstellt und ihre Referenz city1
zugewiesen wird, werden beide Entitäten dem Kontext von EmployeeService
hinzugefügt.
Dadurch wird city1
an zwei verschiedene Kontexte angehängt, was die Ausnahme verursacht.
Lösung:
Methode 1: Verwenden Sie einen einzelnen Kontext
Erstellen Sie eine einzelne Kontextinstanz und fügen Sie sie in zwei Serviceklassen EmployeeService
und CityService
ein:
<code class="language-csharp">var context = new YourDbContext(); // 创建单例上下文 EmployeeService es = new EmployeeService(context); CityService cs = new CityService(context); // 使用相同的上下文实例</code>
Methode 2: Dienste zusammenführen
Konsolidieren Sie verwandte Entitäten in einem einzigen Dienst, der für alle Entitätsinteraktionen verantwortlich ist. Dieser Ansatz vereinfacht die Manipulation von Beziehungen zwischen Entitäten.
Mit der oben genannten Methode können Sie die Ausnahme „Das Entitätsobjekt kann nicht von mehreren IEntityChangeTracker-Instanzen referenziert werden“ vermeiden und die Entität mit der Entitätsreferenz erfolgreich speichern.
Das obige ist der detaillierte Inhalt vonWie löse ich die Ausnahme „Entity Object Referenced by Multiple Instances of IEntityChangeTracker' in Entity Framework 4.1?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!