2011-08-22 2 views
4

Linq를 ORM으로 사용하고 SQL Server Express를 데이터베이스로 사용하는 C# .Net 데스크톱 응용 프로그램을 사용하고 있습니다. 그래서, dataContext.CreateDatabase() 메소드를 사용할 때, linq.cs.와 동일한 순서로 컬럼을 생성하는 시간의 90 % 나머지 10 %에서는 소수 열의 순서가 뒤죽박죽입니다. (언급 된 백분율은 대략적인 값입니다 .Linq.cs는 SqlMetal에서 생성됩니다)DataContext.CreateDatabase는 임의의 순서로 열을 가진 데이터베이스를 만듭니다.

왜 그런 일이 발생했는지 또는 그 제어를위한 몇 가지 설정이 있습니까? 번호 열이 약 30 개이므로 주문을 사용할 것으로 생각했습니다. 그리고 15-20 개의 테이블이 있습니다.

우리는 하이브리드 방식으로 데이터베이스를 사용하는

UPDATE (즉., 또한 SQL 명령을 직접 실행). 그것이 제가 열의 순서를 찾는 이유 중 하나입니다.

+1

아니요, 죄송합니다. 주문에 관심이있는 이유는 잘못된 코딩 표준을 가지고 있기 때문입니다. 입력란은 항상 이름으로 쿼리됩니다. 하이브리드는 여기에 변명의 여지가 없습니다. 필드 순서를 어기는 순서없이 순서를 사용하면 총체적인 태만이됩니다. – TomTom

+0

나는 이해하고있다. 나는 실수하고있다. :) – Prakash

답변

4

내부적으로 LINQ-to-SQL은 SQL 언어를 사용합니다. 테이블을 만들 때 SQL Server를 로깅하면 ALTER TABLE ADD COLUMN과 같은 SQL 문이 표시됩니다.

ADD COLUMN은 열 위치 설정을 허용하지 않습니다. 일반적으로 SQL (언어, 날씨는 Oracle, MySQL 또는 SQLServer)은 열 위치를 제어하는 ​​도구를 제공하지 않으므로 열의 순서는 생성 된 순서에 따라 다릅니다.

이 동작은 의도 한 것입니다. 칼럼 순서에 의존해서는 안됩니다. 대부분의 데이터 액세스 프레임 워크는 이에 대해 명시 적으로 조언하고 어느 시점에서든 열 순서의 일관성을 보장하지는 않습니다.

또한 LINQ-to-SQL을 사용하고 있으므로 하이브리드 방식으로 사용하지 않으면 (즉, SQL 명령을 직접 실행하는 경우가 아니라면) 액세스 할 수 있으므로 순서는 중요하지 않습니다. 해당 이름 지정된 등록 정보를 통해 열.

실제로 하이브리드 방식으로 사용하는 경우 SqlCommands를 실행할 때 항상 열 이름을 지정해야합니다. INSERT INTO MYTABLE VALUES (1,2,3)을 쓰지 말고 INSERT INTO MYTABLE(COL1, COL2, COL3) VALUES (1,2,3)이라고 쓰십시오.

또한 왜 30 열이 있으므로 명령을 사용하게 될지 이해가되지 않습니다. 첫 번째로 30은 높지 않으며 (둘 다 20 개의 테이블이 아님) 둘째, ADDRESS1, ADDRESS2, ADDRESS3과 같은 위치에서 호출 할 수 있다면 일반적으로 데이터베이스 디자인에 결함이 있음을 의미합니다. 1st normal form을 참조하십시오.

+0

글쎄, 우리는 하이브리드 방식을 사용하고 있습니다. 그것이 문제가 된 곳입니다. 이 질문에서 내가 갱신 할 수 있을지도 모른다. – Prakash

+0

거기에서 관찰 된 통계에 대해 더 궁금합니다. – Prakash

+0

아니요, 코드를 업데이트해야합니다;) 위치를 기준으로 필드를 참조 하시겠습니까? 당신이 중학생 인 경우 : 상급생에게 이야기하십시오. 당신이 수석 인 경우 : 경쟁을 위해 노력하십시오. 이 유형의 (초보자) 실수. 참조하는 필드에 명시 적으로 이름을 지정하도록 코드를 업데이트하십시오. 몇 달 안에 그렇게하도록 권고하는 모든 사람들에게 감사 할 것입니다. – TomTom

관련 문제