1

2 개의 데이터베이스 테이블이 있고 외래 키가 가리키는 테이블의 데이터 (기본 키가있는 위치)를 삭제할 때, 해당 데이터를 가리키는 키도 삭제됩니다.외부 테이블의 데이터가 삭제 될 때 외래 키 데이터 삭제

[HttpPost, ActionName("Delete")] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> DeleteConfirmed(int id) 
    { 

     Report report = await db.Reports 
      .Include(i => i.RepFilters) 
      .Where(i => i.ID == id).SingleAsync(); 

     db.Reports.Remove(report); 

     await db.SaveChangesAsync(); 
     return RedirectToAction("Index"); 
    } 

외래 키를 Null 할 수 없습니다.

enter image description here (오류가 나는 수)

하는 방법/그 문제를 해결? (올바른 제목을 만들 수 있도록 도와주세요)

+2

DB 서버의 기본 테이블에서 계단식 삭제를 구성 할 수 있습니다. – Rab

+0

SQL Server MS를 열지 않고도 수행하려고합니다. 나는 LINQ로 그것을하고 싶다. – Arianit

답변

1

그것은 그래서 그냥 true로 변경하고 작동한다면, 시도, 할 수 있습니다.

2

SQL 서버를 사용하지 않으려면 db context에있는 모든 하위 개체를로드하고 삭제해야합니다. .NET 또는 EF는

.WillCascadeOnDelete() 

가 false로 설정 한 사용자의 컨텍스트에 대한 코드를 생성 할 때

+0

은'.Include (i => i.RepFilters)'가 아닌가? – Arianit

+0

다른 자식 개체가있을 수 있습니까? –

+0

아니요 .. 보고서 및 RepFilters 2 테이블이 있습니다. RepFilters에는 Reports를 가리키는 외래 키가 있습니다. 외래 키가 nullable이 아닙니다. – Arianit

1

업데이트 CASCADE의 외래 키는 삭제시 CASCADE 에 으로 구성되어야합니다.

+0

정확하게 너 무슨 뜻이야? 더 자세하게 얘기해 주 시겠어요? – Arianit

+0

외래 키를 검토하십시오. –

+0

이 시점에서 모든 것이 설정됩니다. – Arianit