2010-05-30 6 views
7

다른 공급자를 대상으로 C#에서 SQL 문을 작성하는 방법을 찾고 있습니다. SQL 문을 구분하는 일반적인 예는 LIMIT in PostgreSQLTOP in MSSQL입니다.일반 SQL 빌더 .NET

사용자가 선택하거나 try try 문을 흐름 제어로 사용하는 if 문을 작성하려면 위의 두 가지와 같은 SQL 구문을 해결할 수있는 유일한 방법입니까 (LIMIT가 작동하지 않으면 TOP 대신)? LINQ Take 메서드를 본 적이 있지만 LINQ없이이 작업을 수행 할 수 있는지 궁금한가요?

즉, C#에는 사용할 수없는 찾을 수없는 일반 SQL 공급자 클래스가 있습니까?

+1

왜 LINQ를 사용하지 않으시겠습니까? –

+0

이러한 차이점을 해결할 수있는 방법은 여러 가지가 있습니다. SQL을 사용하면 SQL 문을 사용하는 것이 확실합니다. 즉, 다른 공급자에서 작동 할 SQL 문을 작성할 수있는 시스템을 찾으십니까? –

+0

@Mark Byers : 음, .NET 2를 자주 타겟팅하는 경우가 있습니다. 알고있는 한 LINQ는 그 곳에서 제대로 작동하지 않습니다. 역사적으로 이것은 모퉁이없이 Mono로 포팅 할 수 있기를 원했기 때문에 발생했습니다. 그런 다음 방금 막혔습니다. Mono가 요즘 LINQ와 잘 작동하기 때문에 나는 왜 아직도 과거에 살고 있는지 다른 좋은 대답을 줄 수는 없습니다 .. – Patrick

답변

7

Entity Framework는 다른 데이터베이스를 대상으로 지정할 수 있습니다. 이렇게하면 두 데이터베이스 모두에서 작동하는 LINQ 문을 작성할 수 있습니다. Entity Framework 용 postgresql 공급자를 찾아야합니다. 선택할 수있는 항목이 몇 가지 있습니다.

희망이 도움이됩니다.

3

DBLinq 있습니다 : 오라클, PostgreSQL을, MySQL은, 앵그르, SQLite는, 파이어 버드와 ... SQL Server에 대한

LINQ 공급자 (C# 3.0)

당신은 사용하여 쿼리를 생성 할 때 LINQ to SQL을 사용하면 생성 된 SQL을보고 저장할 수 있습니다.

"LINQ를 사용하지 않고"귀하의 요구 사항을 충족하지 못합니다. LINQ를 사용할 수 있다면 사용하지 않으시겠습니까?

3

나는 "일반적인 SQL 공급자"라고 생각하지 않습니다.

우리 가게에서는 모델, 데이터 액세스 및 비즈니스 로직 클래스를 만드는 레이어 패턴을 구현하기 위해 DB2와 SQL Server를 모두 지원해야합니다. 데이터 액세스 계층은 여러 DBMS에 대한 연결을 처리하고 모델 클래스를로드하여 비즈니스 논리로 다시 전달합니다. 비즈니스 로직과 모델 클래스는 데이터 액세스 레이어가 데이터를 가져 오는 위치를 알지 못합니다.

데이터 액세스 계층이 데이터베이스의 저장 프로 시저를 호출하기 때문에 SQL의 차이가 처리됩니다. 두 시스템에서 적절한 구문으로 저장 프로 시저를 구현했습니다. 우리가해야 할 일은 새로운 DBMS에 필요한 절차를 구현하는 것입니다. 모든 것이 제대로 작동해야합니다.

+0

아참, 내 첫번째 투표. 설명을 부탁드립니다. 감사. –

+0

기본적으로, 당신 자신을 구현합니까? :-) 저장 프로 시저는 내가 아는 한 데이터베이스 중 "표준"이 아니지만 비즈니스 논리로 작업 할 때 발생할 수있는 오류를 줄이기 때문에 저장해야합니다. 예를 들어 db의 목록 테이블을 찾고 "모든 데이터베이스"의 특정 테이블에서 열을 가져 오는 방법을 찾고있었습니다.이 경우 S.P.는 일치하는 것이 좋지 않습니다. – Patrick

+0

귀하의 질문에 데이터베이스 개체를 "검색"하는 요구 사항이 자세히 나와 있지는 않지만 SQL 구현의 차이점을 훨씬 뛰어 넘습니다. 설명 해줘서 고마워요. 그리고 저는 이것이 당신이 찾고있는 것이 아니고 따라서 투표가 안되는 것을 이해합니다. –

1

Marc Tidd의 생각에 합류 - Linq를 원하지 않으면 각 공급자마다 별도의 DAL 클래스를 만들거나 각 DB에 구현되는 저장 프로 시저를 사용하십시오.

+0

예, SQL 문제를 해결하기위한 주요 아이디어는 저장 프로 시저의 사용입니다. 솔루션에 맞지 않는 경우 전체 계층 패턴을 거칠 필요가 없습니다. –