나는 형식화 된 데이터 집합에 다 대다 관계 테이블을 가지고 있습니다. 업데이트를 편리하게하기 위해 이전에 관계를 삭제하기 전에 새로운 (이전과 같음)을 추가합니다.DataTable : 새 안전을 삽입하기 전에 이전 DataRow를 삭제하고 있습니까?
이 방법은 안전 장치의 경우 지금은 궁금해하거나 내가 확인해야하는 경우에만 정말 (LINQ와 함께 예를 들어)을 삭제하는 삭제 만 정말 새로운 하나를 추가 할 수 있습니다. SQL-서버에서
가 관계 테이블에 정의 된 고유 제한 조건이며, 두 개의 외래 키는 복합 기본 키입니다.
는 데이터 어댑터가의 RowState가 <> 변경되지 않은 예측하거나하지 않은 데이터 행을 업데이트 순서인가? 즉,DataAdapter.Update(DataTable)
은 키가 이미 존재할 때 예외가 될 수 있습니까?
이 코드의 일부입니다 (LbSymptomCodes
는 ASP.Net 목록 상자입니다) :
Dim daTrelRmaSymptomCode As New ERPModel.dsRMATableAdapters.trelRMA_SymptomCodeTableAdapter
For Each oldTrelRmaSymptomCodeRow As ERPModel.dsRMA.trelRMA_SymptomCodeRow In thisRMA.GettrelRMA_SymptomCodeRows
oldTrelRmaSymptomCodeRow.Delete()
Next
For Each item As ListItem In LbSymptomCodes.Items
If item.Selected Then
Dim newTrelRmaSymptomCodeRow As ERPModel.dsRMA.trelRMA_SymptomCodeRow = Services.dsRMA.trelRMA_SymptomCode.NewtrelRMA_SymptomCodeRow
newTrelRmaSymptomCodeRow.fiRMA = Services.IdRma
newTrelRmaSymptomCodeRow.fiSymptomCode = CInt(item.Value)
Services.dsRMA.trelRMA_SymptomCode.AddtrelRMA_SymptomCodeRow(newTrelRmaSymptomCodeRow)
End If
Next
daTrelRmaSymptomCode.Update(Services.dsRMA.trelRMA_SymptomCode)
가 사전에 감사
이
은 데이터 모델이다.
감사합니다. 하지만 그렇게되면 DB 호출 3 건 (그리고 트랜잭션 3 건)이 발생합니다. 나는 삭제 된 행과 변경된 행에 대해 이미 수락 된 변경 사항에 대해 Added-Rows에서 업데이트가 실패 할 때 RejectChanges를 수행 할 수 없었습니다. –
@TimSchmelter : 오류가 발생하면 롤백 할 try/catch 블록 내의 모든 트랜잭션을 단일 트랜잭션으로 래핑 할 수 없습니까? – codingbadger
입력 된 데이터 집합에서이 논리가 자동 생성 된 TableAdapters에 캡슐화되어 있기 때문에 가능하지만 어렵습니다. 자동 생성 된 파일과는 별도의 파일로 부분 클래스에서이 어댑터를 확장하고 DataAdapter 자체를 노출시켜 트랜잭션을 제공해야합니다.하지만 나는이 여분의 노력을 피하고 싶다.) –