2009-08-28 14 views
8

Ho un database SQL Server 2008 con un mucchio di stored procedure. Quando uso il modello ActiveRecord fornito con Subsonic 3.0.0.3, genera metodi per tutte le mie stored procedure, ma non hanno alcun parametro. Sono dbo sul server e posso eseguire le stored procedure senza problemi da Management studio.Subsonic 3.0.0.3 non genera parametri per stored procedure

Esempio stored procedure

CREATE PROCEDURE [dbo].[prc_Sample] 
    @FileName VARCHAR(50) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    IF EXISTS (SELECT * FROM Sample WHERE FileName = @FileName) 
    BEGIN 
     RETURN -1 
    END 

    RETURN 0 

END 

Esempio Generated Metodo

public StoredProcedure prc_Sample(){ 
    StoredProcedure sp=new StoredProcedure("prc_Sample",this.Provider); 
    return sp; 
} 

Se controllo SQLServer.ttinclude, vedo che lì tutto di metodi per ottenere le stored procedure sono, ma per qualche motivo non stanno generando. E questo non è un problema di avere caratteri di sottolineatura nei nomi delle stored procedure - questo è rotto con e senza underscore.

Qualche idea o qualcuno sa come eseguire il debug di un file di modello?

+0

Ho lo stesso problema. Posso sicuramente vedere il codice del file .tt che dovrebbe scorrere i parametri del mio stored proc, ma il file .cs finale generato non ha codice che aggiunga quei parametri. Sicuramente bisogno di risolvere questo. – Kon

+0

Mike, ho cancellato la mia risposta (quindi questa apparirà come 0 risposte e spero che qualcuno possa capirlo.) La mia risposta e il nostro scavo non hanno portato a nessuna soluzione. Grazie –

risposta

13

Ho avuto lo stesso problema e ho dovuto modificare il SQLServer.ttinclude per farlo funzionare. All'interno del file che trovare il metodo GetSPParams() e cambiare una sola riga:

da

string[] restrictions = new string[4] { DatabaseName, null, spName, null }; 

a

string[] restrictions = new string[3] { null, null, spName }; 

.

La risposta di BlackMael ha un link utile che mi ha aiutato a capire come eseguire il debug e il codice del modello.

Ora non sono sicuro al 100% che il mio cambiamento sia buono (potrebbero esserci alcuni effetti negativi). Non ho avuto la possibilità di testarlo a fondo e ho bisogno di leggerne altre su Restrictions poiché riguardano il metodo GetSchema(). Ma per ora, questo ha risolto il mio problema e posso passare con successo il mio parametro proc memorizzato.

Aggiornamento: Questo potrebbe avere qualcosa a che fare con il fatto che il mio file DB è incorporato nella soluzione VS in App_Data. Forse questo funziona meglio subito con un'istanza di SQL Server autonoma.

+0

Il mio database non è incorporato, ma appena ospitato su un server SQL Server 2008 Standard Edition. Utilizzando Subsonic 3, ho dovuto generare stored procedure per tutti gli altri database eccetto per questo particolare. Ho persino tentato di crearlo da zero come un databse 2008 e ancora portato a questo problema. Grazie ancora per la correzione. –

1

Per eseguire il debug di un file template T4 ...

T4 Tutorial: Debugging Code Generation Files

Utilizzando il progetto in subsonico-30-modelli che punta a un'istanza di Northwind nella SqlExpress ho aggiunto la stored procedure di cui sopra. Re-generato lo StoredProcedures.tt e felicemente creato ...

public StoredProcedure prc_Sample(string FileName){ 
    StoredProcedure sp=new StoredProcedure("prc_Sample",this.Provider); 
    sp.Command.AddParameter("FileName",FileName,DbType.AnsiString); 
    return sp; 
} 

Anche se io uso la versione più recente costruzione, non ho notato problemi con i parametri mancanti.

potete inserire il vostro Settings.ttinclude e possibilmente SqlServer.ttinclude di file? O forse un link a loro? Il StoredProcedures.tt può essere buono anche.

0

Simile alla risposta di Kon M ho cambiato la riga in SQLServer.tt to:

string[] restrictions = new string[4] { null, null, spName, null }; 

Questo ha risolto il problema per me.

0

Un'altra possibile causa di ciò è che al database non è stato assegnato alcun dbo.

Problemi correlati