2009-05-18 6 views
1

SQL Server 데이터베이스에서 ID 열을 사용할 계획입니다. 현재 고유 한 ID를 생성하기 위해 guid를 사용하고 있지만 순서가 적절하므로 ID columsn으로 전환하는 것이 좋습니다.엔티티 프레임 워크는 데이터베이스에 삽입 할 때 순서를 보존합니까?

주문이 관련되어 있으므로 개체를 엔터티 컨텍스트에 추가하는 순서가 데이터베이스에 삽입되는 순서인지 확인하고자합니다. 이것은 SQL Server가 ID 열의 값을 생성 할 것이므로 관련이 있습니다.

엔티티 프레임 워크가이를 보장합니까? 그렇지 않은 경우 다른 프로세스에서 업데이트되는 데이터베이스에 대해 고유 한 정수 ID를 생성하는 효율적인 솔루션은 무엇입니까?

답변

1

나는 꽤 쉽게 테스트 할 수 있어야하지만 여기에서 추측하고 있지만 EF가 주문을 보장 할 수 있다고는 생각하지 않습니다. 나는 내부 구조가 IEnumerable 타입, 아마리스트 중에 삽입 될 때 열거된다는 것을 확신한다. 그리고 열거는 매번 같은 순서가 될 것을 보장하지 않는다.

대신 데이터베이스 테이블에 전용 "정렬 순서"열을 추가하고 거기서 양식을 만듭니다.

1

레코드 순서가 반환 될 때 삽입 순서에 의존하지 않습니다. 물론, 대부분의 경우 작동하지만 어딘가에 행을 삽입해야한다면 어떨까요? 가장 좋은 방법은 서수 열을 추가하고 반환하려는 각 열의 서수를 적극적으로 생성하는 것입니다.

+0

명시 적으로 순서를 설정하기 위해 ID 열을 추가 할 계획입니다. 그러나 우리가 거기에 넣고 싶은 순서는 도착 순서입니다. 새로운 행에 대한 새 ID를 파생시키기 위해 데이터베이스에 마지막으로 추가 된 행을 쿼리하는 것을 피할 수있는 솔루션을 찾고 있습니다. –

+0

글쎄, 확실히 데이터베이스를 공격하지 않고도 할 수있는 다른 방법이 있습니다. 예를 들어 타임 스탬프를 넣을 수 있습니다. 동시에 많은 행이 들어가면 timestamp + transaction 인덱스를 가질 수 있습니다. 그렇게하고 싶지 않다면 틱을 저장하는 bigint를 가질 수 있습니다. . . 틱마다 하나 이상의 삽입을 얻는 것은 꽤 어렵습니다. 기본적으로 필요하면 시간 서수를 사용할 수 있습니다. 그런 다음 어떤 이유로든 주문을 다시해야하는 경우 해당 옵션을 계속 사용할 수 있습니다. –