2009-08-20 5 views
1

Aknittel
NewSellerID는 tblSellers를 조회 한 결과로,이 테이블 (tblSellerListings 및 tblSellers)은"공식적으로 "외래 키 관계로 조인되지 않습니다. 하지만, 모델이나 데이터베이스에 나는 미래에 대한 유지 일부 참조 무결성을합니다. 내 문제가 남아있다 그래서.이 코드와 예외 ({ "이미 추가 된 동일한 키를 가진 항목을 선택합니다."}) 이유는 무엇입니까 , 만약 내가 새로운 ObjectContext와 foreach 루프의 각 반복을 시작하지 않으며 성능에 영향을 미칠 것이라고 생각 SaveChanges와 함께 끝내십시오. 또한, 왜 ORCSolutionsDataService.tblSellerListings (ADO.NET DataServices/WCF 개체입니다 말해 줄 수 하지 LINQ와 같은 엔티티 ??왜이 예외가 발생합니까? {동일한 키가있는 항목이 이미 추가되었습니다. "})

로는 IDisposable, =================== ===========================

// Add listings to previous seller 
int NewSellerID = 0; 

// Look up existing Seller key using SellerUniqueEBAYID 
var qryCurrentSeller = from s in service.tblSellers 
         where s.SellerEBAYUserID == SellerUserID 
         select s; 

foreach (var s in qryCurrentSeller) 
    NewSellerID = s.SellerID; 

// Save the selected listings for this seller 

foreach (DataGridViewRow dgr in dgvRows) 
{ 

    ORCSolutionsDataService.tblSellerListings NewSellerListing = new ORCSolutionsDataService.tblSellerListings(); 
    NewSellerListing.ItemID = dgr.Cells["txtSellerItemID"].Value.ToString(); 
    NewSellerListing.Title = dgr.Cells["txtSellerItemTitle"].Value.ToString(); 
    NewSellerListing.CurrentPrice = Convert.ToDecimal(dgr.Cells["txtSellerItemPrice"].Value); 
    NewSellerListing.QuantitySold = Convert.ToInt32(dgr.Cells["txtSellerItemSold"].Value); 
    NewSellerListing.EndTime = Convert.ToDateTime(dgr.Cells["txtSellerItemEnds"].Value); 
    NewSellerListing.CategoryName = dgr.Cells["txtSellerItemCategory"].Value.ToString(); 
    NewSellerListing.ExtendedPrice = Convert.ToDecimal(dgr.Cells["txtExtendedReceipts"].Value); 
    NewSellerListing.RetrievedDtime = Convert.ToDateTime(dtSellerDataRetrieved.ToString()); 
    NewSellerListing.SellerID = NewSellerID; 

    service.AddTotblSellerListings(NewSellerListing); 

} 

service.SaveChanges(); 

}

캐치 (예외 예) { MessageBox.Show ("새 케이스를 추가 할 수 없습니다. 예외 : "+ ex.Message);

}

+0

NewSellerListing의 기본 키는 무엇입니까? BTW, 당신은 정말 당신이 직접 쿼리에서 그것을 넣을 수 있으며, sellerId를 얻기 위해 첫 번째 foreach 루프가 필요하지 않습니다 : NewSellerID =을 (service.tblSellers에서의 어디에서 s.SellerEBAYUserID == 선택 SellerUserID s.SellerID) 좁은 방 (); // 물론 ID가 발견되지 않으면 처리해야하지만 데이터베이스 시간을 절약 할 수 있습니다. – xandy

+0

호기심 때문에, 왜 qryCurrentSeller에서 foreach var s를 수행하고 NewSellerID에 지속적으로 값을 다시 할당하고 있습니까? NewSellerID는 첫 번째 foreach의 마지막 반복 만 수행합니다. ??? –

답변

0

당신이 이전 값을 기반으로 새 객체를 생성 ID를 지정하고, DB에 저장하는 것처럼 보이는 그 다음, true 인 경우. 새 개체는 복사 한 개체와 동일한 ID를 갖습니다. 업데이트 중이거나 새 레코드를 저장하고 있습니까?

동일한 작업을 수행하는 데 훨씬 빠른 방법이있는 것처럼 보입니다. 재 할당되거나 복사되는 ID 목록을 얻으려면 다음과 비슷한 SQL을 사용할 수 있습니다.

update tblSellerListings set SellerID = "new seller id" where ItemID in (list of ids); 

컨텍스트를 다시 사용하면 쿼리에서 다음 증분으로 ID가 계속 유지되는 경우 문제가 될 수 있습니다. 새로운 것을 생성하면 그 값이 클 것입니다. 나는 이것이 사실이라면 그 가치를 지울 수있는 방법이 있음을 확신한다.

제이콥

관련 문제