문제

저는 현재 작은 CRUD 애플리케이션을 설계하고 있습니다.그들의 데이터베이스는 엄청나게 엉망이며 향후 6개월에서 1년에 걸쳐 자주 변경될 것입니다.내 데이터 영역에 무엇을 추천하시겠습니까?

1) ORM(그렇다면 어느 것입니까?)

2) 린q2SQL

3) 저장 프로시저

4) 매개변수화된 쿼리

테이블을 자주 교체하고 열을 추가/삭제할 수 있는 충분히 동적인(빠르고 쉬운) 솔루션이 정말로 필요합니다.

메모:저는 ORM에 대한 경험이 많지 않으며(SubSonic이 약간 있음) 일반적으로 저장 프로시저를 사용하는 경향이 있으므로 그렇게 하는 것이 좋습니다.위에서 설명한 상황이 허용된다면 Ling2Sql이나 NHibernate를 배우고 싶습니다.

도움이 되었습니까?

해결책

여기서 알아야 할 중요한 점 중 하나는 데이터베이스 스키마가 자주 변경되는 경우 일정 수준의 컴파일 시간 유형 안전성을 원한다는 것입니다.NHibernate는 xml 매핑 파일을 사용하기 때문에 이것이 문제라는 것을 알았습니다. 따라서 데이터베이스 스키마에서 무언가를 변경하면 런타임까지 매핑이 깨졌음을 알 수 없습니다.

저장된 프로세스에도 문제가 있습니다.

Linq2Sql을 사용하면 컴파일 타임에 스키마를 변경할 때 코드가 중단되는 위치를 정확히 알 수 있는 이점이 있습니다.이것은 자주 변경되는 스키마로 작업하는 경우 다른 모든 것보다 우선적으로 적용되는 것입니다.

다른 팁

빌드 공급자(웹 사이트 프로젝트) 설정을 사용하여 SubSonic을 살펴보겠습니다.이는 프로젝트를 빌드할 때마다 DAL 개체를 자동으로 재생성하므로 매우 효과적입니다. 따라서 데이터베이스가 코드를 손상시키는 방식으로 변경되면 빌드 오류가 발생합니다.

데이터베이스 스키마가 매우 복잡해지고 ActiveRecord 패턴의 한계에 도달할 때까지는 잘 작동했지만 스키마가 크게 복잡하지 않은 한 꽤 잘 작동했습니다.스키마가 안정화되면 원할 때만 DAL을 구축하도록 전환할 수 있습니다.

당신은 확실히 ORM을 사용하고 싶습니다.어떤 ORM이라도 괜찮지만 강력한 형식의 클래스를 생성하는 ORM을 원합니다.테이블에서 필드가 추가, 수정 또는 삭제되면 해당 클래스를 다시 생성하고 컴파일 시간 오류 수정만 처리할 수 있기를 원합니다.동적 모델을 사용하면 불쾌한 런타임 오류가 많이 발생할 가능성이 높습니다.이건 매우 중요합니다!나는 마이세대 Sourceforge의 개발 팀과 협력하고 있으며 이것이 귀하의 문제에 대한 훌륭한 솔루션이라고 생각합니다.dOOdads, NHibernate, EasyObjects, EntitySpaces 등을 생성할 수 있습니다.더 비싼 솔루션을 사용하고 싶다면 코드스미스 또는 LLBLGen 프로.행운을 빕니다. MyGeneration 사용에 관심이 있는 사람이라면 누구나 질문이 있으면 언제든지 저에게 연락해 주세요.

NH절전 모드, 그러나 클래스를 정의한 다음 매핑 파일에서 원하는 테이블 구조를 정의하고 NHibernate의 내장 스키마 생성 클래스를 사용하여 데이터베이스 스키마를 생성하는 객체 우선 접근 방식을 사용할 수 있는 경우에만 해당됩니다.

다른 방법으로 수행하는 방법(예: 여러 개의 테이블이 있고 이를 기반으로 개체 디자인을 하는 경우)을 찾았습니다. 마이세대 + NHibernate를 사용하여 작업합니다. 결과 클래스가 너무 만족스럽지는 않지만(주로 저는 진정한 객체 지향 프로그래밍을 고집하기 때문입니다).

내가 당신의 입장이라면 Linq2Sql로 내가 알고 있는 것(sprocs)을 활용하려고 노력할 것입니다.Linq2Sql은 여전히 ​​sproc을 사용할 수 있지만 새로운 도구를 벨트에 추가하는 추가 보너스도 있습니다.내 생각에 Linq2XXX(X는 성인용 엔터테인먼트가 아닌 임의의 기술입니다....지금 생각해보면 나쁘지 않은 생각입니다.) 구문과 방법론을 이해하는 것은 다음을 사용하는 기술 세트에 큰 도움이 될 것입니다. 개체 컬렉션에 대한 Linq는 매우 유용합니다.

그러나 궁극적으로 NHibernate와 같은 것이 장기적으로 당신에게 더 적합할 것입니다.

EntitySpaces는 1분 안에 DAL/비즈니스 계층을 재생성할 수 있으며 코드 손실은 없습니다. 평가판을 참조하세요 ==> 여기

등록이 필요하지 않으며 Visual Studio에서도 실행됩니다.

EntitySpace를 사용하세요.당신은 나에게 꽃을 보낼 것입니다.정말 대단해요.원하는대로 db를 변경하십시오.버튼을 눌러, 쾅.모든 변경 사항이 완료되었습니다.사용자 정의 코드를 변경하지 않고.나는 그것을 좋아한다.

응용 프로그램이 얼마나 간단합니까?몇 달 동안 스키마/디자인 관련 작업을 하고 실제 앱에 대해서는 걱정하지 않는다면 말이죠...EDM과 Dynamic Data Entities 웹 응용 프로그램 프로젝트 사용을 고려해 보겠습니다.제 생각에는 최소한의 노력으로 이 작업을 수행할 수 있습니다.이를 통해 스키마, 데이터 및 기타 멋진 것들에 집중할 수 있습니다.나는 이것으로부터 너무 많은 부정적인 충돌을 얻지 않기를 바랍니다!

새 프로젝트 대화 상자는 다음과 같습니다. 이것

이미 저장된 프로세스에 만족하고 있으며 변경되는 스키마를 추상화하는 데 충분할 수도 있습니다.ORM이 저장된 프로세스에 만족하지 않는다면 변경되는 스키마에 대해 최신 상태를 유지하는 뷰를 사용하여 작업할 수도 있습니다.

데이터베이스 스키마가 자주 변경되는 경우 LINQ2SQL보다 Entity Framework를 선호하세요.스키마가 변경되면 L2S를 사용하여 다음을 수행해야 합니다.
1) 테이블을 제거하고 다시 추가하십시오(사용자 정의 내용이 손실됨)
2) 모델을 직접 수정합니다(여기서는 stackoverflow에서 수행됨).

EF는 L2S의 상위 집합으로, 더 많은 사용 유연성과 DBMS 독립성을 제공합니다.

왜 변경되는지 살펴보고, 코드가 손상되지 않도록 다가오는 변경 사항을 예측하고 일반화할 수 있는지 확인하세요.

프레임워크를 사용하면 변경 사항을 더 쉽게 수용할 수 있지만 더 심층적인 분석을 수행하면 장기적인 이점을 얻을 수 있습니다.

어떤 솔루션이든 작동할 수 있습니다. 실제로 필요한 것은 삽입, 선택, 업데이트 및 삭제와 같은 기본 작업이 작동하는지 보장하는 일련의 테스트입니다.이렇게 하면 간단하게 테스트를 실행하고 매핑이 최신인지 확인할 수 있습니다.

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