2012-07-13 2 views
0

현재 웹 서비스를 설계하고 있으므로 실제 코드가 없지만 데이터베이스와 응용 프로그램 디자인에 잠재적으로 영향을 미칩니다.C# ADO.NET 새로운 자동 증가 기본 키의 값을 결정 하시겠습니까?

bigint의 기본 키가 자동 증가하는 데이터베이스 테이블 (SQL Server에서)을 사용할 계획입니다. 이제 ADO.NET에서 테이블에 새 레코드를 추가 할 때이 필드를 설정하지 않을 것이라고 가정합니다. 내가 알아야 할 것은 방금 추가 된 ID가 무엇인지 어떻게 알 수 있는가입니다. 물론 그 필드에서 선택된 MAX를 수행 할 수 있지만 실제로 ADO.NET은 새로운 ID의 값을 반환하여 오버 헤드를 절약 할 수 있습니까? 예를 들어

,이 같은 일부 코드가 있다면 : 표에 자동 증가 PK는 ID라는 있었다면

using (MyEntities context = new MyEntities()) 
{ 
    context.Table1.AddObject(new Table1() 
    { 
     StringColumn1 = "some value", 
     StringColumn2 = "some value" 
    }); 

    context.SaveChanges(); 
} 

, 어떻게 난 그냥 추가 된 값을 알고 있습니까? 엔티티 프레임 워크를 사용

+1

의 ID를 엔티티 프레임 워크를 사용하여이인가 얻을? 그렇다면 : EF는 삽입 작업을 할 때 자동으로 ID를 업데이트해야합니다. 원시 ADO.NET을 사용한다면 - INSERT 명령문의'OUTPUT' 절을 사용하거나'INSERT' 바로 다음에 호출되는'SCOPE_IDENTITY()'를보십시오 (같은 SQL 배치에 있음) –

+0

예 EF를 사용하고 있습니다. @marc_s - 그렇게 할 것입니다. 그것은 문제가되지 않았습니다. 그 가치가 무엇인지 어떻게 알 수 있습니까? – Jonnster

+1

삽입하려고하는 객체에 대한 참조를 유지해야하고'.SaveChanges()'를 호출 한 후 해당 객체에서 ID 속성을 읽을 수 있습니다. –

답변

1

내가 그것을 이런 식으로 달성 EF와 당신 때문에

using (MyEntities context = new MyEntities()) 
{ 
var table1 = new Table1() 
{ 
     StringColumn1 = "some value", 
     StringColumn2 = "some value" 
}; 

    context.Table1.AddObject(table1); 

    context.SaveChanges(); 

int id = table1.Id; 
} 
+0

고마워요. 그래서 EF가 실제로 이드를 채울 것입니다. – Jonnster

+0

@Jonnster 예. 죄송합니다. 빨리 입력 했으므로 다시 일할 수 있습니다. – HatSoft

2

,이 모두가 당신을 위해 자동적으로 수행됩니다

using (MyEntities context = new MyEntities()) 
{ 
    var myNewObject = new Table1() 
    { 
     StringColumn1 = "some value", 
     StringColumn2 = "some value" 
    }); 

    context.Table1.AddObject(myNewObject); 

    context.SaveChanges(); 

    // get the new ID 
    var newID = myNewObject.ID; 
} 

엔티티 프레임 워크에 저장이 자동으로 "자동 증가"ID 열을 업데이트하며, 당신은 단지 .SaveChanges()에 대한 호출 후를 읽어 기억이 맞다면 ...

+1

데이터베이스를 생성하는 대신 직접 모델을 생성하는 경우'StoreGeneratedPattern'을'Identity'로 설정해야한다고 생각합니다 – paul

관련 문제