4

エンティティ フレームワークに問題があります。たとえば、次のようにします。

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

次に、それに依存する子エンティティをマップしたエンティティを削除しようとすると、エラーが発生するのは論理的です。(依存するデータベースに子がある場合、親を削除できません)。

その後、新しいコンテキスト インスタンスを使用して「ParentEntity.ChildEntities.ToList()」を実行すると、まだ問題があります。

回避策はアプリ プールを再起動することで、問題は解消されます。

Autofac を使用しており、コンテキストのライフサイクルが HttpRequest ごとに設定 (および確認) されているため、エラーは別の場所で持続します。これらのエラーを回避するために何ができるか考えていますか?

objectcontext は別の場所に永続的であり、子エンティティの状態を "EntityState.Deleted" として保存するため、後続の呼び出しでデータベースから受信した実際のデータと競合すると推測されます。

更新:スタックを詳しく調べると、内部コンテキストが遅延していることがわかります。

[DbUpdateException: An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details.]
    System.Data.Entity.Internal.InternalContext.SaveChanges() +200
    System.Data.Entity.Internal.LazyInternalContext.SaveChanges() +33
    System.Data.Entity.DbContext.SaveChanges() +20

たぶん、LazyInternalContext を何らかの形で無効にしたらどうでしょうか。これはできますか?

4

1 に答える 1