2010-06-18 9 views
1

나는이 세 테이블을 싫어합니다. 두 테이블은 다 대다 관계를 가지므로 세 번째 테이블을 생성합니다.안전하게이 기록을 삭제할 수 있습니까?

http://imgur.com/yLKif.png

내가 Linq에 - 투 - SQL을 사용하고하고하면 .dbml 파일에 나는 그래픽 표면에 존재하는 모든 폴더를 드래그했습니다.

Area를 안전하게 삭제하는 방법은 다음과 같습니다. 문서는 영역과 연결되어 있으므로 문서를 삭제하고 문서를 매달아 둘 수는 없습니다.

 ScansDataContext db = new ScansDataContext(); 

     /// <summary> 
     /// Deletes an Area object from the database along with all associations in the database. 
     /// </summary> 
     /// <param name="area">Area object to save</param> 
     public void Delete(Area area) 
     { 
      db.DocumentAreaRelations.DeleteAllOnSubmit(area.DocumentAreaRelations); 
      db.Areas.DeleteOnSubmit(area); 
      db.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict); 
     } 
+0

왜 데이터베이스에 제약 조건을 넣지 않습니까? 그렇게하면 프로그램 적으로 또는 수동으로 데이터를 엉망으로 만드는 것은 불가능합니다. 누군가가 들어 와서 뚱뚱한 것을 손가락으로 튀기고 당신의 영역을 삭제하면 좌초하게됩니다. 이것이 관계와 제약이 DB에 속한 이유입니다. –

+0

어떤 DB를 사용하고 있습니까? –

+0

Microsoft SQL Server –

답변

3

데이터베이스에 관계를 시행하는 제약 조건이 여전히 있다고 가정하면 ... 내게 좋을 것처럼 보입니다. 데이터베이스에 키가 설정되어 있지 않으면 키를 추가해야합니다.

모든 관계를 먼저 삭제하고 실제 엔티티를 두 번째로 지정하고 SubmitCahnges()은 로컬 트랜잭션의 모든 항목을 래핑하여 하나의 작업 단위가되도록합니다.

+0

Visual Studio 그래픽 디자이너를 사용하여 외래 키를 설정했습니다. 이 유스 케이스에 충분합니까? –

+0

키에 DELETE CASCADE가 설정되어 있는지 확인하십시오. –

1

예, 레코드를 삭제해야합니다. 그러나 데이터베이스를 정확하게 설정했는지 확인하십시오.

CONSTRAINT [FK_tblCategory_tblCompany] FOREIGN KEY([CompanyID]) 
REFERENCES [tblCompany] ([ID])ON DELETE CASCADE ON UPDATE CASCADE 

또는 당신은 당신의 dataentity이 설정할 수 있습니다

0

나는 MS SQL 서버 2008

를 사용하여 뭔가 비슷한을 몇 테이블을했습니다 나는 삭제에 계단식으로 설정 외부 키를 . 그래서 당신이 테이블 상황을 감안할 때, 나는 영역을 삭제할 것이고, 일단 delete 명령이 서버에 보내지면 자동적으로 조인 테이블에 계단식으로 내려 간다. OnDelete Trigger는 조인 테이블에서 사용되어 조인 레코드가 제거 된 후 문서가 안전하게 제거되도록합니다.

LINQ는 결코 불평하지 않았지만 안전한 것으로 간주하기 위해 열거 된 경우 단일 개체의 외래 키 관계를 정리하는 LINQ 클래스에서 항상 "제거"기능을 사용했습니다. 이것은 주로 삭제되는 것과는 대조적으로 편집중인 개체를위한 것입니다.

Partial Class MyLINQObject 
    Public Sub ScrubRelationships() 
     _RelatedTableObjects = New EntityRef(Of RelatedTableObject) 
    End Sub 
End Class 

희망 하시겠습니까?

관련 문제