I don't know EF so well so I'm really stucked.
My purpose is create a complex type object in my repository layer from a stored procedure, usually the process is really easy:
Update Model from database
double click on the selected stored procedure
press the button "Get Column Information" in Add Import Function form
Then, press the button "Create new complex type"
At this point EF has created my object type in my repository layer.
My problem is the following:
In my TSQL Code I have a lot of queries, SELECT, INSERT, Etc.. but my result it should be the last SELECT executed, instead EF gets the first one executed.
How can I get the right query?
EDIT:
Here the SP:
GO
/****** Object: StoredProcedure [dbo].[sp_CreaTestataOrdine] Script Date: 09/15/2013 12:08:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[sp_CreaTestataOrdine] (
@LOGIN varchar(20),
[...] -- A LOT OF PARAMS
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @TMAMN varchar(6),
[...] -- A LOT OF DECLARATIONS
DECLARE @tab TABLE (id_doc bigint, num_ordine varchar(7))
SELECT @TMAMN = 'TMAMN', @TMAV2 = 'TMAV2', @TMAVR = 'TMAVR', @TMAVR = 'TMAVR', @TMAIN = 'TMAIN', @TMNMA = 'TMNMA', @TMNV2 = 'TMNV2', @TMNVR = 'TMNVR', @TV2MA = 'TV2MA', @TV2MN = 'TV2MN', @TV2VR = 'TV2VR', @TVRMA = 'TVRMA', @TVRMN = 'TVRMN', @TVRV2 = 'TVRV2', @TMAM2 = 'TMAM2', @TMNM2 = 'TMNM2', @TVRM2 = 'TVRM2', @TV2M2 = 'TV2M2', @TM2MA = 'TM2MA', @TM2MN = 'TM2MN' , @TM2VR = 'TM2VR' , @TM2V2 = 'TM2V2', @OVW1 = 'OVW1', @OVW2 = 'OVW2', @OVW3 = 'OVW3', @MAG_MARMIROLO = '2', @MAG_MANTOVA = '3', @MAG_INTERNET = '6', @MAG_VERONA = '4', @MAG_VERONA2 = '5', @MAG_MANTOVA2 = '8'
SELECT * FROM utenti WHERE login = @LOGIN
IF @@ROWCOUNT > 0
BEGIN
SELECT @nome_ord = nome, @cognome_ord = cognome, @cod_fiscale_ord = codice_fiscale, @p_iva_ord = p_iva, @indirizzo_ord = indirizzo, @cap_ord = cap, @localita_ord = localita, @stato_ord = stato, @prov_ord = provincia, @tel_fisso = tel_fisso, @tel_cell = tel_cell, @email_ord = email, @cod_cliente = cod_cliente FROM utenti WHERE login = @LOGIN
END
IF @DEST_DIVERSA = 1
BEGIN
SELECT @nome_ord = @nome_dest, @cognome_ord = @cognome_dest, @indirizzo_ord = @indirizzo_dest, @cap_ord = @cap_dest, @localita_ord = @localita_dest, @prov_ord = @provincia_dest, @tel_fisso = @telefono_dest, @email_ord = @email_dest
SELECT * FROM spedizioni WHERE id_spedizione = @paese_dest_id
IF @@ROWCOUNT > 0
BEGIN
SELECT @stato_ord = nazione, @cod_iva_id = fk_cod_iva_id FROM spedizioni WHERE id_spedizione = @paese_dest_id
END
END
IF @cod_iva_id = ''
BEGIN
SELECT @cod_iva_id = NULL
END
SELECT * FROM lk_codici_iva WHERE cod_iva_id = @cod_iva_id
IF @@ROWCOUNT > 0
BEGIN
SELECT @cod_iva_perc = cod_iva_perc, @cod_iva_descr = cod_iva_descr FROM lk_codici_iva WHERE cod_iva_id = @cod_iva_id
END
--la richiesta fattura è possibile solo se il cliente e la destinazione sono Italia
IF @richiesta_fattura = 1 AND @cod_iva_descr = '20'
BEGIN
SELECT * FROM spedizioni WHERE id_spedizione = @paese_fatt_id
IF @@ROWCOUNT > 0
BEGIN
SELECT @paese_fatt = nazione FROM spedizioni WHERE id_spedizione = @paese_fatt_id
END
END
IF @cod_iva_descr = 'A41'
BEGIN
SELECT @causale_documento = @OVW2
END
ELSE IF @cod_iva_descr = 'A8'
BEGIN
SELECT @causale_documento = @OVW3
END
ELSE IF @cod_iva_descr = '20'
BEGIN
SELECT @causale_documento = @OVW1
END
SELECT @importo_iva = 0, @importo_imponibile = 0, @importo_contrassegno = NULL
IF @pagamento = 'Contrassegno'
BEGIN
SELECT @importo_contrassegno = 5.0
--calcolo l'imponibile sulle spese di contrassegno
SELECT @importo_imponibile = @importo_imponibile + ((@importo_contrassegno * 100) / (100 + @cod_iva_perc))
SELECT @importo_totale = @importo_totale + @importo_contrassegno
END
--calcolo l'imponibile sulle spese di spedizione
SELECT @importo_imponibile = @importo_imponibile + ((@spese_spedizione * 100) / (100 * @cod_iva_perc))
IF @Standard = 1
BEGIN
SELECT @mod_spedizione = 'Standard'
END
ELSE IF @Express = 1
BEGIN
SELECT @mod_spedizione = 'Express'
END
ELSE IF @Expedited = 1
BEGIN
SELECT @mod_spedizione = 'Expedited'
END
--imposto il numeratore per l'ordine di vendita generico
SELECT * FROM causali_documenti INNER JOIN numeratori ON fk_caus_doc_num = caus_doc_num WHERE caus_doc = @causale_documento
IF @@ROWCOUNT > 0
BEGIN
SELECT @caus_doc_caus_mov1 = caus_doc_caus_mov1, @caus_doc_num = caus_doc_num, @descr_causale = caus_doc_descr, @num_progr = (num_progr + 1) FROM causali_documenti INNER JOIN numeratori ON fk_caus_doc_num = caus_doc_num WHERE caus_doc = @causale_documento
END
SELECT @num_ordine = dbo.StringAddZero(@num_progr, 7)
--nel caso di bonifico e contrassegno l'ordine è da considerarsi definitivo quindi si applicano i movimenti di magazzino
IF @pagamento = 'Bonifico' OR @pagamento = 'Contrassegno'
BEGIN
EXEC @cod_doc_def = sp_ProgressivoDoc
BEGIN TRAN
INSERT INTO documenti_testata(id_doc, [login], fk_caus_doc, descr_causale, cod_cliente, ragsoc_cliente, data_creazione, data_modifica, anno, num_ord_v, mod_pagamento, mod_spedizione, mod_contrassegno, utente, importo_spedizione, importo_contrassegno, importo_totale, fk_cod_iva_id, dest_diversa, cognome_dest, nome_dest, email_dest, indirizzo_dest, provincia_dest, cap_dest, localita_dest, telefono_dest, stato_dest, stato_usa_dest, richiesta_fattura, indirizzo_fatt, provincia_fatt, cap_fatt, localita_fatt, stato_fatt, stato_usa_fatt, p_iva_fatt, cod_fiscale_fatt) VALUES (@cod_doc_def, @LOGIN, @causale_documento, @descr_causale, @cod_cliente, @rag_soc, getdate(), getdate(), year(getdate()), @num_ordine, @pagamento, @mod_spedizione, @pag_contrassegno, @LOGIN, @spese_spedizione, @importo_contrassegno, @importo_totale, @cod_iva_id, @DEST_DIVERSA, @cognome_ord, @nome_ord, @email_ord, @indirizzo_ord, @prov_ord, @cap_ord, @localita_ord, @tel_fisso, @stato_ord, @stato_usa, @richiesta_fattura, @indirizzo_fatt, @provincia_fatt, @cap_fatt, @localita_fatt, @paese_fatt, @stato_usa_fatt, @p_iva, @cod_fiscale_fatt)
UPDATE numeratori SET num_progr = num_progr + 1 WHERE caus_doc_num = @caus_doc_num
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
--RETURN 1
END
COMMIT TRAN
INSERT @tab VALUES(@cod_doc_def, @num_ordine)
SELECT * FROM @tab
END
-- nel caso di Paypal o della carta di credito occorre aspettare la conferma della transazione per rendere definitivo l'ordine pertanto carico l'ordine nella tabella temporanea
ELSE IF @pagamento = 'Paypal' OR @pagamento = 'Carta' OR @pagamento = 'Carta2'
BEGIN
BEGIN TRAN
SET NOCOUNT ON;
INSERT INTO tmp_documenti_testata([login], fk_caus_doc, descr_causale, cod_cliente, ragsoc_cliente, data_creazione, data_modifica, anno, num_ord_v, mod_pagamento, mod_spedizione, mod_contrassegno, utente, importo_spedizione, importo_contrassegno, importo_totale, fk_cod_iva_id, dest_diversa, cognome_dest, nome_dest, email_dest, indirizzo_dest, provincia_dest, cap_dest, localita_dest, telefono_dest, stato_dest, stato_usa_dest, richiesta_fattura, indirizzo_fatt, provincia_fatt, cap_fatt, localita_fatt, stato_fatt, stato_usa_fatt, p_iva_fatt, cod_fiscale_fatt) VALUES (@LOGIN, @causale_documento, @descr_causale, @cod_cliente, @rag_soc, getdate(), getdate(), year(getdate()), @num_ordine, @pagamento, @mod_spedizione, @pag_contrassegno, @LOGIN, @spese_spedizione, @importo_contrassegno, @importo_totale, @cod_iva_id, @DEST_DIVERSA, @cognome_ord, @nome_ord, @email_ord, @indirizzo_ord, @prov_ord, @cap_ord, @localita_ord, @tel_fisso, @stato_ord, @stato_usa, @richiesta_fattura, @indirizzo_fatt, @provincia_fatt, @cap_fatt, @localita_fatt, @paese_fatt, @stato_usa_fatt, @p_iva, @cod_fiscale_fatt);
SELECT @cod_doc_tmp = SCOPE_IDENTITY();
UPDATE numeratori SET num_progr = num_progr + 1 WHERE caus_doc_num = @caus_doc_num
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
--RETURN 1
END
COMMIT TRAN
INSERT @tab VALUES(@cod_doc_tmp, @num_ordine)
SELECT * FROM @tab **-- I WANT THIS ONE!!!!!**
END
END
PS: This SP is not Mine is a legacy