3

중복되지 않아야하는 필드에이 규칙을 위반하는 행이 추가되어 있는지 확인하기위한 솔루션을 찾기 위해 노력하고 있습니다. 리포지토리 패턴을 사용하고 있으므로 리포지토리에서이 작업을 수행하기위한 메서드를 만들고 싶습니다. 그것을 추가되기 전에 내가 컨트롤러에 회사를 추가하려고이 예에서 Entity Framework 코어 리포지토리 패턴 - 중복 확인

는 CompanyRespository에서이 메서드를 호출

public bool Exists(Company company, bool ignoreId) 
    { 
     if (!ignoreId) 
     { 
      if (context.Companies.Any(c => c.Id == company.Id)) return true; 
     } 
     if (context.Companies.Any(c => c.TextId == company.TextId)) return true; 
     if (context.Companies.Any(c => c.Email == company.Email)) return true; 
     if (context.Companies.Any(c => c.PhoneNumber == company.PhoneNumber)) return true; 
     return false; 
    } 

내가 컨트롤러 때문에 오류를 반환하려고 직면하고 문제 클라이언트에게 오류를 보낼 수 있습니다. 확실한 해결책은 true를 반환하는 대신 Exceptions를 보내는 것입니다. 그러나이 매개 변수를 가진 회사가 있다면 그냥 예외를 보내고 싶지 않다고 말하면됩니다. 두 경우 모두 부울을 원합니다.

줄이기 질문 :이 상황에서 부울 대신 예외를 반환하는 다른 방법 인 CheckDuplication()을 만드는 것이 바람직하지 않습니까? 그렇다면 Entity Framework Core에서 데이터베이스에 저장하기 전에 중복 된 필드를 확인하는 올바른 방법은 무엇입니까?

+3

보다 복잡한 리턴 오브젝트를 사용하여 원하는 정보를 보유하십시오. ModelState 사용 방법과 유사합니다. – Nkosi

+2

@Nkosi에 동의하는 경향이 있습니다. IEnumerable 또는 IList (무엇이든지간에 무엇이든지)과 존재를 나타내는 부울 인 두 가지 속성이있는 모델을 반환하는 것이 가장 좋은 이유는 무엇입니까? [명확성을 위해 편집되었습니다.] – Trioj

+2

PS 본질적으로 존재 확인 및 유효성 검사를 분리하는 데 문제가 있다고 생각하지 않습니다. boolean과 예외를 던지거나 일종의 열거 형을 반환하는 Validate() 메서드를 반환하는 Exists() 메서드를 사용하는 것이 좋습니다. 두 가지를 하나의 모델로 결합하는 것이 이치에 맞지 않는다면하지 마십시오. 원래 계획대로 지키십시오. 단점은 테이블에 새 필드를 추가 할 때마다 두 가지 방법을 유지한다는 것입니다. 하나의 객체를 반환하기 위해이 모든 것을 하나의 메소드로 변환하는 것이 실제로 더 까다롭게 만들 수도 있습니다. – Trioj

답변

1

별도의 유효성 검사를 수행하면 사용자 친화적 인 응용 프로그램을 작성할 수 있습니다. 그러나 데이터 무결성을 보장하기 위해이 검사에 의존하는 실수를 저 지르지 마십시오. 다중 스레드가 우려의 주요 원인이됩니다. SQL DB는 데이터 무결성을보다 잘 보호 할 수 있으므로 각 필드에 대해 고유 한 제약 조건을 정의하는 것이 좋습니다 (예 : Setting unique Constraint with fluent API? 확인). 물론 EF 예외를 발생시킬 수는 있지만 제약 조건 위반 여부를 결정하기 위해 잡히거나 검사 될 수 있습니다. 그렇게하면 필요한 경우 부울을 반환 할 수 있습니다.

부작용으로 Exits 메서드는 OR (||)을 사용하여보다 효율적으로 작성 될 수 있으므로 그렇게 많은 SQL 쿼리를 실행하지 않아도됩니다.

+0

데이터베이스에 나쁜 상태가되는 것을 원하지 않으므로 제약 조건이 이미 활성화되어 있습니다. 데이터베이스에 나쁜 상태를 방지하는 방법이 있으면 primarliy를 사용합니다. 그러나, 나는 ef 예외를 검사하는 것과는 반대로 쉽게 구문 분석 예외를 반환하기 위해 유효성 검사 방법이라고 생각하는 사용자 친화적 인 솔루션을 기대하고있었습니다. 부탁드립니다. 비슷한 것을 시도했지만 "||" 그것을하는 방법이었다. – Richard