Entity Framework를 통해 레코드를 삽입하는 Customer 테이블이 있습니다. 이 테이블에는 정수 기본 키 (custid)가 있습니다. 컨텍스트에 고객 레코드를 추가하기 전에 마지막으로 사용한 키를 가져 오도록 데이터베이스에 쿼리 한 다음 custid를 1보다 높게 설정합니다.Entity Framework - 레코드를 추가 한 후 필드 값을 변경 하시겠습니까?
그러나 쿼리와 새 레코드를 데이터베이스에 저장하는 사이에 다른 클라이언트가 해당 custid로 레코드를 저장할 수 있으므로 SaveChanges()를 호출 할 때 지금 인하여 예외가 발생합니다 중복 된 가치.
내 계획은 SaveChanges() 호출을 try {} 블록에 넣고 예외를 catch 한 다음 다시 한 번 더 증가시켜 다시 시도하십시오.
내가 custid의 값을 변경하는 방법에 대해 잘 모르겠지만 이제는 컨텍스트에 이미 추가되었습니다.
이CUSTOMER myCustomer = new CUSTOMER();
myCustomer.FirstName = "John";
myCustomer.LastName = "Smith";
myCustomer.Custid = GetLastCustid() + 1;
myContext.CUSTOMERS.Add(myCustomer);
bool SavedOK = false;
while (!SavedOK)
{
try
{
myContext.SaveChanges();
SavedOK = true;
}
catch (DBUpdateException e)
{
if (IsCustidConflict(e))
{
// Increment Custid by one
// How do I do that?????
continue;
}
}
}
기본 키 '자동 증가'옵션을 설정하십시오. 이 모든 것은 데이터베이스 자체에서 처리됩니다! – sarwar026
기존의 프로덕션 데이터베이스라는 점을 제외하고는이 시점에서 동작을 변경할 수 없습니다. – JoeMjr2