我不太了解EF,所以我真的很困惑。
我的目的是从存储过程在我的存储库层中创建一个复杂类型的对象,通常该过程非常简单:
从数据库更新模型
双击选定的存储过程
在添加导入功能表单中按“获取列信息”按钮
然后,按下按钮“创建新的复杂类型”
此时 EF 已在我的存储库层中创建了我的对象类型。
我的问题如下:
在我的 TSQL 代码中,我有很多查询,SELECT、INSERT 等。但我的结果应该是执行的最后一个 SELECT,而不是 EF 执行的第一个。
我怎样才能得到正确的查询?
编辑:
这里是 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:这个SP不是我的,是遗产