Ich habe Modelle ähnlich wie diese:Wie lösche ich eine Entität, wenn ihre Eigenschaften auf dieselbe Entität verweisen?
public class Line
{
public int Id {get; set;}
public int FromStopId {get; set;}
public int ToStopId {get; set;}
public virtual Stop FromStop {get; set;}
public virtual Stop ToStop {get; set;}
}
public class Stop
{
public int Id {get; set;}
public int OwnerId {get; set;}
public virtual Owner Owner {get; set;}
}
Lines
haben unterschiedliche Stops
jedoch viele Stops
die gleiche Owner
haben.
Ich lade ein komplettes Line
Include
Einheit wie folgt verwendet:
public virtual IQueryable<T> Get(int id, params Expression<Func<T, object>>[] include)
{
if (include.Any())
{
var set = include.Aggregate<Expression<Func<T, object>>, IQueryable<T>>
(dbSet, (current, expression) => current.Include(expression));
}
return dbSet.AsNoTracking<T>().Where(x => x.Id == id);
}
Unter Verwendung der oben kann ich eine Line
Einheit laden, seine Stops
Entitäten und deren Owners
, die in diesem Fall gleich ist.
Nun, wenn ich versuche, die Line
Einheit löschen ich tun:
dbSet.Attach(entity);
dbSet.Remove(entity);
Allerdings habe ich die Ausnahme erhalten:
eine Einheit vom Typ ‚Eigentümer‘ Anbringen schlug fehl, da eine andere Einheit von Derselbe Typ hat bereits denselben Primärschlüsselwert. Dies kann passieren, wenn Sie die Methode "Attach" verwenden oder den Status einer Entität auf "Unverändert" oder "Modifiziert" setzen, wenn Entitäten im Diagramm widersprüchliche Schlüsselwerte aufweisen. Dies liegt möglicherweise daran, dass einige Entitäten neu sind und noch keine datenbankgenerierten Schlüsselwerte erhalten haben. In diesem Fall verwenden Sie die "Add" -Methode oder den Entity-Status "Added", um den Graphen zu verfolgen und anschließend den Status von nicht-neuen Entitäten auf "Unchanged" oder "Modified" zu setzen.
Ich gehe davon aus, dass dies, weil beide Stops
die gleiche Owner
haben verursacht wird. Jedoch ist die nicht die gleiche Entität, sondern 2 Entitäten, die unabhängig für jede Stop
beim Laden der Line
erstellt werden.
Wie kann ich Line
Einheit in einem solchen Fall löschen?
Überprüfen Sie, ob dies [link] (http://stackoverflow.com/questions/30350058/attaching-an-entity-of-type-x-failed-because-another-entity-of-the-same-type) hilft. Wenn die Entity aus dem Kontext geladen wird, hängt sie nicht an. – Sarang
@Sarang Die Entität ist getrennt, da ich 'AsNoTracking()' verwende. –