私はこれと同様のモデルいる:エンティティのプロパティが同じエンティティを参照する場合、エンティティを削除するにはどうすればよいですか?
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
が異なるStops
を持っている、しかし、多くのStops
は同じOwner
を持つことができます。
次のように私はInclude
を使用して完全なLine
エンティティをロード:
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);
}
私はこのケースでは同じであるLine
エンティティ、そのStops
エンティティとそのOwners
を読み込むことができます。しかし
dbSet.Attach(entity);
dbSet.Remove(entity);
、私は例外を取得::私は私が行うLine
エンティティを削除しようとすると、今
、
タイプ「所有者」の実体を取り付けるには、別の実体ために失敗しました同じ型はすでに同じ主キー値を持っています。これは、「Attach」メソッドを使用するか、またはグラフ内のエンティティのいずれかが競合するキー値を持つ場合、エンティティの状態を「Unchanged」または「Modified」に設定すると発生します。これは、一部のエンティティが新しく、データベース生成キー値をまだ受け取っていないことが原因です。この場合、 'Add'メソッドまたは 'Added'エンティティ状態を使用してグラフを追跡し、非新規エンティティの状態を 'Unchanged'または 'Modified'に適切に設定します。
これは、両方ともStops
が同じOwner
を持っていることが原因であると想定しています。ただし、Owner
は同じエンティティではなく、Line
をロードするときにはStop
ごとに独立して作成される2つのエンティティです。
この場合、Line
エンティティを削除するにはどうすればよいですか?
[link](http://stackoverflow.com/questions/30350058/attaching-an-entity-of-type-x-failed-because-another-entity-of-the-ame-type)助けてください。エンティティがコンテキストからロードされている場合、エンティティをアタッチしないでください。 – Sarang
@Sarang 'AsNoTracking()'を使用しているため、エンティティはデタッチされています。 –