엔티티 Framework, VB 및 SQL Server를 사용합니다.Scope_Identity가 예상대로 반환되지 않습니다.
새 레코드를 삽입하고 관련 레코드의 새 ID를 반환하는 저장 프로 시저 (아래 참조)가 있습니다 (id 열은 올바르게 정의 된 ID 열임). 저장 프로시 저는 내 엔터티 데이터 모델로 가져오고 새 레코드의 ID가 예상 된 결과와 함께 함수로 호출됩니다. 그러나 나는 항상 0을 리턴한다.
ssms에서 저장 프로 시저를 실행하면 결과 창에서 기대되는 결과를 얻을 수 있으며 값이 0 인 별도의 결과 (명확하게 매핑 된 저장 프로 시저에 반환되는 결과)가 표시됩니다.
저장 프로 시저에 오류가 있거나 함수를 호출하는 방식이 잘못되었습니다 (아래 참조). 나는 당신이 제안해야 할 수도있는 제안에 대해 정말로 감사 할 것입니다.
저장 프로 시저 :
ALTER PROCEDURE [Finances].[CreatePurchaseInvoicePayment]
-- Add the parameters for the stored procedure here
@PurchaseInvoiceId int = NULL,
@SupplierId int = NULL,
@PurchaseInvoicePaymentDate date = NULL,
@Amount money = NULL,
@PaymentType int = NULL,
@ChequeNumber nchar(10) = NULL,
@BankAccountId int = NULL,
@purchaseInvoiceCreditNoteId int = NULL,
@ConversionFactor numeric(4,2) = NULL,
@ModifiedDate date = NULL,
@id int = NULL OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO Finances.PurchaseInvoicePayments
VALUES
(
@PurchaseInvoiceId,
@SupplierId,
@PurchaseInvoicePaymentDate,
@Amount,
@PaymentType,
@ChequeNumber,
@BankAccountId,
@purchaseInvoiceCreditNoteId,
@ConversionFactor,
@ModifiedDate
)
SET @id = SCOPE_IDENTITY()
END
과 같이 호출되는 :
나는 사람이 올바른 방향으로 날 지점 수 있다면 가장 감사하게 될 거라고 말하는 것처럼Try
pipId = CInt(te.CreatePurchaseInvoicePayment(pip.PurchaseInvoiceId, pip.SupplierId, pip.PurchaseInvoicePaymentDate, pip.Amount, pip.PaymentType, pip.ChequeNumber, pip.BankAccountId, pip.PurchaseInvoiceCreditNoteId, pip.ConversionFactor, pip.ModifiedDate,nothing).FirstOrDefault)
Catch ex As Exception
.
Yuriy, Scope_Identity를 선택하면 결과가 동일합니다. 스토어드 프로 시저는 ID (원하는 비트)와 리턴 값인 0을 리턴합니다.이 비트는 함수가 항상 선택하는 것으로 보이며, 원하지 않는 비트입니다. –
좋아, 반환 값을 선택하는 것 같습니다. 당신은'SELECT SCOPE_IDENTITY()'대신'RETURN SCOPE_IDENTITY()'를 끝내시겠습니까? –
안녕하세요. 프로 시저를 수정하여 변수 ID를 int로 선언하고 그 값을 끝에있는 Scope_Identity, 리턴 ID 순으로 설정했습니다. sproc은 이제 단 하나의 것을 반환합니다 (신원). 그러나 흥미롭게도 함수에서 호출되면 여전히 0을 반환합니다. 이제는 혼란 스럽습니다. –