2013-08-03 2 views
3

내 데이터베이스 서비스로 서비스 기반 데이터베이스 (*.mdf)를 사용하고 있습니다. Linq-To-SQL 클래스를 사용하고 있습니다.데이터베이스에서 다음 ID를 생성하는 방법

다음 ID를 생성하고 싶습니다. 현재 마지막으로 삽입 된 행의 ID를 얻으려고하고 다음 ID를 얻기 위해 1을 더합니다. 내 기본 키의 데이터 유형은 int입니다. 이에

The query operator 'Last' is not supported.

+2

왜 내림차순으로 주문하지 않으십니까? –

+0

idk 왜, lol이고 작동합니까! btw, 무엇이'last()'에 문제가 있습니까? – Cignitor

+0

솔직히 말해서, 나는 당신에게 말할 수 없었다, 나는 어둠 속에서 총을 맞고 있었다. :) –

답변

4

무엇 약간 다른 접근 방식에 대해?

private string genNextId() 
{ 
    var id = (from a in dc.nasabahs 
       select a.nomor_nasabah).Max(); 

    return id.ToString(); 
} 
+0

우리 대답 사이에 어느 것이 더 효율적인 런타임인지는 확실치 않지만,이 방법이 맘에 든다. 다른 접근 방식이다. –

+0

네, 실행 계획 조사가 필요합니다. 이상적으로, 데이터베이스는 '주문 방식'이 무릎에 가져 오지 않도록 설계되었지만 결코 알 수는 없습니다. 또한 옵션을 제공하기를 원했습니다. – ethorn10

+0

그리고 그것도 작동합니다! – Cignitor

3
이 변경

당신 funciton :

private string genNextId() 
{ 
    var id = (from a in dc.nasabahs 
       orderby a.nomor_nasabah ascending 
       select a.nomor_nasabah).Last(); 

    return id.ToString(); 
} 

나는 오류를 얻을

private string genNextId() 
    { 
     var id = (from a in dc.nasabahs 
        orderby a.nomor_nasabah descending 
        select a.nomor_nasabah).First(); 

     return id.ToString(); 
    } 
0

오라클과 같은 다른 데이터베이스에도 오랫동안 사용할 수 있지만 SQL Server 2012에서만 사용할 수있는 시퀀스를 사용해야합니다. Sequence은 숫자 값을 생성하는 데이터베이스 개체이며 값이 생성되어 소비되면 다시 생성되지 않습니다. 장점은 삽입 작업을 수행하지 않고도 가치를 얻을 수 있다는 것입니다. 그러나 linq-to-sql이 이것을 지원한다고 생각하지 않으므로 원시 ado.net을 사용해야합니다.

0

그냥 내 두 센트를 추가하는 것에 대해 생각했습니다. 위의 모든 사람들은 서비스 기반 데이터베이스 또는 mdx 파일의 아이디 속성을 구성하는 방법을 실제로 말하지 않았습니다. 테이블을 만들거나 처음 만들 때 테이블 정의로 이동 한 다음 열 특성에서 ID 지정과 같은 내용을 보게됩니다. 신분입니다. 예를 선택하십시오. 원하는 단계 크기에 따라 1로 설정됩니다. 1로 설정하십시오 (초기 값)

관련 문제