DbContext.SaveChanges()
메서드를 재정의하고 내 ISoftDelete
인터페이스를 구현하는 엔티티의 삭제를 취소하여 프로젝트에서 소프트 삭제 기능을 구현하려고합니다. 나는 '삭제'상태에 있고 ISoftDelete
를 구현하는 모든 항목에 대한 내 SoftDelete() 메서드를 호출하고있는 SaveChanges()
방법에서연관을 사용한 엔티티 삭제 덮어 쓰기
interface ISoftDelete
{
bool IsDeleted { get; set; }
}
:. 다음
var entries = this.ChangeTracker.Entries().Where(x => (x.State == EntityState.Deleted) && x.Entity is ISoftDelete)
.ToList();
entries.ForEach(SoftDelete);
내 SoftDelete()
방법대로 :
일대일 다른 것이있는 엔티티를 실행할 때까지 완벽하게 작동합니다.
{"A relationship from the 'ChildParent' AssociationSet is in the 'Deleted' state. Given multiplicity constraints, a corresponding 'Parent' must also in the 'Deleted' state."}
그 실체에 대한 모든 연결을 얻을뿐만 아니라 그들을 위해 삭제 된 상태를 변경할 수있는 방법이 있나요 : 어떤 시점에서, 예외는이 오류와 함께 발생합니다?
저는 이미 실제 연결된 엔티티에 대한 참조를 얻으려고했지만 엔터티의 EntityState
은 Deleted
대신 Unchanged
으로 설정되었습니다.
관련 자체가 삭제 된 것으로 표시됩니다 (연결은 EF에서 별도의 개체로 처리됨). 관련 엔터티는 아닙니다. 이제 EF가 연관을 제거하려고 할 때 관련된 엔티티가 삭제로 표시되지 않았기 때문에이를 수행 할 수 없습니다. 나는 외래 키가 nullable이 아니므로 엔티티를 제거하면 관련 엔티티 (계단식 삭제)를 제거해야한다고 가정합니다. 이 스레드는 http://stackoverflow.com/questions/10300156/ivalidatableobject-is-useless-for-ef-navigation-properties/10304323#10304323에서 확인할 수 있습니다. 관련 객체를 가져 오는 방법을 보여주기 때문에 도움이 될 수 있습니다. – Pawel
관련 객체를 가져 오는 데 도움이되었습니다. 감사합니다. 그러나 관계 중 하나의 상태를 변경하려고하면 "관계의 끝 중 하나가 KeyEntry 인 경우 관계의 상태를 변경할 수 없습니다."라는 이상한 오류가 발생합니다. – Jonathan
[이 해결 방법] (http://connect.microsoft.com/VisualStudio/feedback/details/513174/unable-to-refresh-some-items-in-the-objectcontext)을 보았습니까? –