문제

이렇게 하는 것이 허용됩니까?먼저 엔터티를 추가해 보세요.추가가 실패하면 엔터티가 이미 존재한다는 의미이므로 문제가 되지 않습니다.

아니면 더 우아하고 쉬운 솔루션이 있습니까?

EntityFrameworkEntities dal = EntityDataModelHelper.GetEntityDataModel();

try
{
    dal.AddToXXXXXX(xxxxxxx);
}
catch
{

}

try
{
    dal.SaveChanges();
    return true;
}
catch
{
    return false;
}

알았어, 줄였어...

EntityFrameworkEntities dal = EntityDataModelHelper.GetEntityDataModel();

if(xxxxxxx.ID == 0)
{
    dal.AddToXXXXXX(xxxxxxx);
}

try
{
    dal.SaveChanges();
    return true;
}
catch
{
    return false;
}
도움이 되었습니까?

해결책

확실히 ~ 아니다 괜찮아요. C# 유형이없는 캐치 문은 "표준 또는 비표준 예외를 잡는"것을 의미합니다. 그러나 당신은 중복 추가를 방지하는 것입니다. 기존 항목을 나타내지 않는 여러 가지 이유로 추가가 실패 할 수 있습니다. 예를 들어,이 방법은 널리 참조를 던질 수 있으며 추가되었다고 가정합니다.

중복 추가를 확인하려면 ~ 해야 하다 중복 추가에 대한 예외 만 포착하십시오.

다른 팁

IfExists 스타일 메서드로 시작한 다음 실제로 변경 사항이 없으면 변경 사항 저장을 건너뛰는 것이 좋습니다.

Lucas가 지적했듯이 try-catch 블록은 catch 블록에 빠지면 큰 오버헤드를 가지므로 일반적으로 항목이 이미 존재하는지 확인할 수 있는 방법이 없는 한 이에 의존하고 싶지 않습니다.

If 문의 작업을 수행하기 위해 try-catch를 사용하지 마십시오.Try-catch는 예상치 못한 특이한 이벤트에 사용됩니다.

편집하다업데이트된 코드에서는 "AddToXXXXXX" 메서드에서 발생하는 예외를 포착하지 못했습니다.

당신은해야합니다

If(!XXXXXX.Contains(newItemValue))
{
   try
   {
      add...
      savechanges...
   }
   catch
   {

   }
}

또는 Add 및 Savechanges를 다른 try-catch 블록으로 분리할 수 있지만 이는 Add가 실패하더라도 SaveChanges가 실행되는 경우에만 필요합니다.

첫 번째 Try-Catch를 IF 문으로 바꿀 수 있습니다. 그래도 두 번째를 원한다고 생각합니다.

편집하다: 또한 그들이 무엇인지에 관계없이 한 블록에서 모든 예외를 포착하는 것이 좋습니다.

추신 : 캐치 블록은 IF 문보다 더 많은 처리 능력 (시간)을 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top