image

연결되지 않은 엔티티는 제거할 수 없습니다.

Attach 메소드로 DataClassesDataContext를 연결 해주면됩니다.

 

image

void AttachAll(
	IEnumerable entities,
	bool asModified 
)

Boolean 매개 변수를 false로 설정하여 개체에 타임스탬프(RowVersion)가 없음을 나타냅니다

컬렉션을 업데이트하려면 Attach 대신 AttachAll을 호출합니다.

 

 

아래코드는 수정/추가/삭제를 동시에 하고 있습니다.

리스트는 클라이언트에서 웹서비스를 통해 서버측에 전달해주고 있습니다

그럼므로 DataClassesDataContext 와는 연결이 끊겨있습니다.

AttachAll 을 사용하여 Data.DocDataClassesDataContext 가 데이터를 관리하게 지정하는 부분입니다.

   using (TransactionScope ts = new TransactionScope())
            {
                Data.DocDataClassesDataContext dc = new Data.DocDataClassesDataContext(this.dbconn);
                //추가
                dc.GetTable<Contract.Data.Doc.DocCategory>().InsertAllOnSubmit(DocCategoryList.Where(c => c.IsNew == true));

                //수정               
                dc.GetTable<Contract.Data.Doc.DocCategory>().AttachAll(DocCategoryList.Where(c => c.IsEdited == true), true);
                //이부분 주석처리하면 오류발생
				dc.GetTable<Contract.Data.Doc.DocCategory>().AttachAll((DocCategoryList.Where(c => c.IsDeleted == true)));
                dc.GetTable<Contract.Data.Doc.DocCategory>().DeleteAllOnSubmit(DocCategoryList.Where(c => c.IsDeleted == true));

                dc.SubmitChanges();
                ts.Complete();
            }

 

 

위의 설명보다 더 자세한 MSDN

http://msdn.microsoft.com/ko-kr/library/bb546187.aspx

+ Recent posts