중복되지 않아야하는 필드에이 규칙을 위반하는 행이 추가되어 있는지 확인하기위한 솔루션을 찾기 위해 노력하고 있습니다. 리포지토리 패턴을 사용하고 있으므로 리포지토리에서이 작업을 수행하기위한 메서드를 만들고 싶습니다. 그것을 추가되기 전에 내가 컨트롤러에 회사를 추가하려고이 예에서 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에서 데이터베이스에 저장하기 전에 중복 된 필드를 확인하는 올바른 방법은 무엇입니까?
보다 복잡한 리턴 오브젝트를 사용하여 원하는 정보를 보유하십시오. ModelState 사용 방법과 유사합니다. – Nkosi
@Nkosi에 동의하는 경향이 있습니다. IEnumerable 또는 IList (무엇이든지간에 무엇이든지)과 존재를 나타내는 부울 인 두 가지 속성이있는 모델을 반환하는 것이 가장 좋은 이유는 무엇입니까? [명확성을 위해 편집되었습니다.] –
Trioj
PS 본질적으로 존재 확인 및 유효성 검사를 분리하는 데 문제가 있다고 생각하지 않습니다. boolean과 예외를 던지거나 일종의 열거 형을 반환하는 Validate() 메서드를 반환하는 Exists() 메서드를 사용하는 것이 좋습니다. 두 가지를 하나의 모델로 결합하는 것이 이치에 맞지 않는다면하지 마십시오. 원래 계획대로 지키십시오. 단점은 테이블에 새 필드를 추가 할 때마다 두 가지 방법을 유지한다는 것입니다. 하나의 객체를 반환하기 위해이 모든 것을 하나의 메소드로 변환하는 것이 실제로 더 까다롭게 만들 수도 있습니다. – Trioj