PetaPoco micro-ORM을 사용하고 있습니다. ORM 도구를 사용하여 데이터베이스로 작업하는 것은 실제로 매우 쉽고 안전하지만 내가 싫어하는 유일한 것은 추가 코드입니다. 나는 대부분의 코드를 데이터베이스 자체에 넣고 저장 프로 시저, 트리거 등과 같은 모든 RDBMS 기능을 사용하여 더 잘 처리했습니다.
스토어드 프로 시저 / 트리거에서 ORM을 사용하지 않을 때와 그 반대의 경우를 알고 싶습니다.
PetaPoco micro-ORM을 사용하고 있습니다. ORM 도구를 사용하여 데이터베이스로 작업하는 것은 실제로 매우 쉽고 안전하지만 내가 싫어하는 유일한 것은 추가 코드입니다. 나는 대부분의 코드를 데이터베이스 자체에 넣고 저장 프로 시저, 트리거 등과 같은 모든 RDBMS 기능을 사용하여 더 잘 처리했습니다.
스토어드 프로 시저 / 트리거에서 ORM을 사용하지 않을 때와 그 반대의 경우를 알고 싶습니다.
답변:
ORM (Object-Relational Mapping)은 저장 프로 시저와 상호 배타적이지 않습니다. 대부분의 ORM은 저장 프로 시저를 사용할 수 있습니다. 원하는 경우 대부분의 ORM은 저장 프로 시저를 생성합니다. 따라서 문제는 또는 아닙니다.
ORM은 허용 할 수없는 SQL (성능 측면에서)을 생성 할 수 있으며 때로는 수작업 SQL로 해당 SQL을 대체 할 수도 있습니다. 이를 수행하는 방법 중 하나는 SP (저장 프로 시저)를 사용하는 것입니다.
DotNet에서 다음과 같은 경우 저장 프로 시저를 사용하지 마십시오.
저장 프로 시저에 익숙하지 않은 경우 (사례는 아니지만 완전성을 위해 포함 된)
복잡한 계층을 도입하고 싶지 않고 프로젝트를 다각화하고 싶지 않은 경우.
다른 데이터베이스에서 작동하거나 여러 데이터베이스 서버에서 복제해야하는 애플리케이션을 작성 중입니다 (이 마지막 제한 사항은 일부 데이터베이스에만 적용될 수 있음).
트리거는 ORM과 비교되지 않습니다. 트리거는 응용 프로그램 코드에없는 기능 (예 : 데이터베이스에서 데이터 로깅 또는 동기화)을 수행합니다.
일부 사람들은 보안 (예 : SQL 삽입 방지) 및 주장 된 속도와 같은 여러 가지 이유로 코드에서 SQL보다 저장 프로 시저를 사용하는 것을 선호합니다. 그러나 이것은 다소 논쟁의 여지가 있으며 자세한 논의가 필요합니다.
ORM이 저장 프로 시저를 생성 할 수없고 큰 시스템을 작성해야하는 경우에는 사례에 따라 추가 핸드 코딩의 가중치를 부여해야합니다.
ORM은 종종 데이터베이스가 ORM을 제공하기 위해 존재한다고 가정합니다. 그러나 일반적으로 데이터베이스는 회사에 서비스를 제공하기 위해 존재하며 여러 언어로 작성된 수백 및 수백 개의 앱이 데이터베이스를 공격 할 수 있습니다.
그러나 저장 프로 시저를 호출 할 수없는 ORM을 사용하는 경우에는 "ORM vs. 저장 프로 시저"의 경우에만 해당됩니다. 그렇지 않으면 비즈니스 로직을 코딩 할 위치를 결정하는 경우입니다.
비즈니스 로직을 코딩하는 곳마다 데이터베이스를 변경 하는 응용 프로그램에 관계없이 데이터베이스가 일관된 상태에서 다른 일관된 상태로 변경되도록해야합니다 . 따라서 실제로는 데이터베이스에서 한 번 코딩하거나 "침착 할 수없는"데이터 액세스 계층에서 한 번 코딩하는 두 가지 실용적인 선택 만 할 수 있습니다.
"완벽한"DAL을 사용하는 경우 dbms 명령 행 인터페이스에주의하십시오.
동의하지 않는다. ORM 쿼리는 SQL을 알고있는 것보다 ORM을 잘 알고있는 경우에만 더 간단합니다. ORM은 훨씬 더 많은 코드를 만들어 IMO를 유지하기가 훨씬 더 어렵습니다. ORM의 혜택을받는 유일한 사람은 ORM을 판매하는 회사의 주주입니다 (예 : Microsoft).