런타임까지 스키마를 알 수없는 데이터베이스에 대해 ORM을 어떻게 활용할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/136366

문제

다음 요구 사항이 주어지면 ORM을 활용하려고합니다.

1) .net 프레임 워크 사용 (최신 프레임 워크는 괜찮습니다)
2) Sybase, Oracle, MSSQL을 상호 교환 할 수 있어야합니다.
3) 스키마는 대부분 정적이지만 동적 부품이 있습니다.

나는 subsonic 및 nhibernate에 대해 다소 익숙하지만 깊지는 않습니다.
나는 ORM이 내가 원하는 것을 할 수 있다는 잔소리를 느끼지만, 현재 그것을 활용하는 방법을 모르겠습니다.

Subsonic은 현재 Sybase를 지원하지 않기 때문에 최적이 아니며, 내 자신의 공급자를 작성하는 것은 지금 내 자원과 능력을 넘어서는 것입니다.

#3 (위)의 경우 공급 업체가 기존 데이터베이스에 "스테이플을"할 수있는 테이블을 설명하는 메타 데이터 테이블 몇 개가 있습니다.
이것을 부르자 중족기, 그리고 Metafields.

ORM (nhibernate atm)이 잘 처리하는 기본 정적 스키마가 있습니다.
하지만, 공급 업체는 메타 데이터 테이블에 데이터를 추가하여 구조를 설명하는 한 데이터베이스에 테이블을 추가 할 수 있습니다 (물리적으로).

내가 정말로 좋아하는 것은 내가 이해하는 방식으로 ORM을 어떻게 든 "피드"할 수 있고, 그 시점에서 데이터를 조작 할 수있게하는 것입니다.

내 기본 목표 이 동적 테이블에서해야 할 일반 SQL 문 빌딩의 양을 줄이는 것입니다.
또한 SQL의 차이가 Sybase, Oracle 또는 MSSQL로 전송되는 것에 대해 걱정하지 않아도됩니다.

내 기본 문제 메타 데이터에 액세스 할 때 런타임까지 동적 테이블에 대해 Orm을 알리는 방법이 없다는 것입니다.

편집하다: 사용의 예는 하나 일 수 있습니다. 여기에 설명되어 있습니다:

idatareader rdr = new query ( "dynamictable1"). 여기서 ( "ArbitraryId", 2) .Executereader ();

(그러나 Sybase 제공 업체가 없기 때문에 Subsonic이 작동하는 것처럼 보이지 않습니다 (위 참조).

도움이 되었습니까?

해결책

이 블로그를 사용하면 실제로 사용할 수 있습니다 동적 매핑으로 nhibernate. 그래도 약간의 조정이 필요합니다 ...

다른 팁

우리는 nhibernate를 사용했지만 프로젝트가 우리가 원하는 ROI를 제공하지 않았기 때문에 프로젝트를 중단했습니다. 우리는 결국 우리 자신의 ORM/SQL 레이어를 작성하여 매우 잘 작동했습니다 (더 이상 일하지 않기 때문에 작동했지만 여전히 작동한다고 생각합니다).

우리 시스템은 오픈 소스 프로젝트를 사용하여 SQL을 생성하고 (더 이상 이름을 기억하지 못함) 자체 XML 기반 언어 (쿼리 마크 업 언어 -QML)로 모든 쿼리를 만들었습니다. 그런 다음 Selects, Wheres, Groups 등으로 XMLDocument를 구축 한 다음 SQLENGINE으로 보내 SQL 문으로 전환하여 실행할 수 있습니다. 우리는이 모든 것에서 캐시를 불러 일으키지 만 결코 구현하지 않았습니다. 이를 통해 자주 사용되는 쿼리를 위해 QMLS를 캐시 할 수있었습니다.

나는 런타임에 ORM이 어떻게 사용되는지에 대해 약간 혼란 스럽습니까? ORM이 런타임에 동적으로 무언가를 빌드한다면 런타임 코드는 어떻게 ORM이 동적으로 무엇을했는지 알 수 있습니까?

"그 시점에서 데이터를 조작 할 수있게 해줍니다" - 데이터를 조작하는 것은 무엇입니까?

나는 여기에 무언가를 놓치고있을 수 있으며 그것이 사실이라면 aplogize. (저는 ORM과 함께 상향식 접근 방식 만 사용했습니다)

IdataReader는 당신이 아는 객체에 아무것도 매핑하지 않습니다. 따라서 예제는 클래식 쿼리 빌더를 사용하여 작성해야합니다.

ado.net 엔티티 프레임 워크 사용을 살펴 보셨습니까?

MSDN : LINQ에서 엔티티

이를 통해 데이터베이스 테이블을 사용중인 데이터베이스 공급 업체에 대해 생각하지 않고 DBA가 실제 테이블에 대한 사소한 변형에 대해 걱정하지 않고 코딩 할 수있는 방식으로 데이터베이스 테이블을 객체 모델에 매핑 할 수 있습니다. 매핑은 재 컴파일없이 DB 테이블을 수정할 때 수정할 수있는 구성 파일로 유지됩니다.

또한 LINQ를 사용하여 엔티티를 사용하면 쿼리를 OO 방식으로 빌드 할 수 있으므로 실제 SQL 쿼리 문자열을 작성하지 않습니다.

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