2011-05-10 2 views
0

LINQ를 사용하여 SQL 삽입 쿼리를 실행하고 ID 필드를 반환하려고합니다. 내 코드가 작동하지 않는다. 아무도 내 구문이 잘못되었는지 말해 줄 수 있니?LINQ에서 SQL을 실행할 때 return id 필드

string query = "insert into EnvironmentalReportDepts "; 
       query += "(fkDeptID, OrderNumber, fkEnvironmentalReportID) "; 
       query += "values(" + tmpDeptReport.fkDeptID + ", " + tmpDeptReport.OrderNumber + ", " + tmpDeptReport.EnvironmentalReport.EnvironmentalReportID + ") "; 
       query += "select scope_identity()"; 

       var newDeptID = _database.ExecuteQuery<int>(query).ToList()[0]; 
+0

왜 엔티티를 사용하여 해당 레코드를 유지하지 않습니까? –

+0

루프에 삽입로드가 있고 이전에 만든 submitchanges 행을 실행하는 데 이전에 만든 페이지에서 작업 할 때이 메서드를 사용해야합니다. – user517406

+0

나는 이해한다. 일반적으로, 나는 이런 식으로 MS 엔터프라이즈 라이브러리의 일부인 일반 ADO.NET 또는 데이터 액세스 블록을 사용합니다. –

답변

2

한번에 변경

query += "select scope_identity()"; 

또한

query += "; select scope_identity()"; 

, 당신은 사용 할 수 있습니다

_database.ExecuteQuery<decimal>(query).ToList()[0]; 
+1

Re'decimal' : ID가 정수형 (예 :'INT')이라면,'query + = "를 사용하고 CONVERT (INT, SCOPE_IDENTITY())"를 선택하고'ExecuteQuery '을 계속 사용할 수 있습니다. –

0

변경 쿼리 :

string query = "DECLARE @scope_identity int"; 
query += "insert into EnvironmentalReportDepts ";    
query += "(fkDeptID, OrderNumber, fkEnvironmentalReportID) ";     
query += "values(" + tmpDeptReport.fkDeptID + ", " + tmpDeptReport.OrderNumber + ", " + tmpDeptReport.EnvironmentalReport.EnvironmentalReportID + ") "; 
query += "SET @[email protected]@IDENTITY";     
query += "select @scope_identity"; 
관련 문제