2016-07-18 7 views
0

Ich bin neu in. NET und Erstellen der Web-Services. Ich habe eine komplexe Oracle-Abfrage, die ausgeführt werden muss, wenn die Dienste aufgerufen werden. Ich gebe nur das Beispiel der Abfrage unten.Dapper zum Erstellen eines Web-Service

SELECT 
STCD_PRIO_CATEGORY_DESCR.DESCR, 
STRS_SESSION3.SESSION_NUM, 
Trunc(STRS_SESSION3.START_DATE), 
STRS_SESSION3.START_DATE, 
Trunc(STRS_SESSION3.END_DATE), 
Round((TO_DATE (TO_CHAR (STRS_SESSION3.END_DATE, 'dd/mm/yyyy hh24:mi'),'dd/mm/yyyy hh24:mi') - TO_DATE (TO_CHAR (STRS_SESSION3.START_DATE, 'dd/mm/yyyy hh24:mi'),'dd/mm/yyyy hh24:mi'))*1440), 
STCD_ACT_DESCR4.DESCR, 
decode((decode(sign((DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))),-1,(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE)),(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))+(STPR_OPTIONS.VALUEN)))),-1,'Y',0,'N','N')), 'N', Decode ((STPR_OPTIONS.VALUEN), '1', trunc(((  DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))),-1,(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE)),(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))+(STPR_OPTIONS.VALUEN)))-1) /7)+1, '0', trunc((DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))),-1,(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE)),(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))+(STPR_OPTIONS.VALUEN)))/7)), 'Y', (trunc(((DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))),-1,(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE)),(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))+(STPR_OPTIONS.VALUEN))) +1)/ 7)-1) , -999), 
DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - ( 
FROM 
STPR_STD_ANML, 
STPR_ANML, 
STPR_OPTIONS, 
STCD_ACT_DESCR STCD_ACT_DESCR4, 
STCD_ACT_DESCR, 
STCD_UNIT_DESCR, 
STCD_UNIT_DESCR STCD_UNIT_DESCR2, 
STCD_UNIT_DESCR STCD_UNIT_DESCR10, 
STCD_ACT STCD_ACT4, 
STCD_ACT, 
WHERE 
    (STPR_STUDY.ID=STPR_STUDY_DET.STD_ID) 
    AND (STPR_STUDY_DET.STD_TYPE_ID=STCD_STUDY_TYPE.ID) 
    AND (STCD_STUDY_TYPE_DESCR.STUDY_TYPE_ID(+)=STCD_STUDY_TYPE.ID AND STCD_STUDY_TYPE_DESCR.LANG_ID(+) = 1) 
    AND (STPR_STUDY.ID=STPR_STD_SPECIES.STD_ID(+)) 
    AND (STPR_STD_SPECIES.SPECIES_ID=STCD_SPECIES.ID(+)) 
    AND (STPR_STD_SPECIES.STRAIN_ID=STCD_STRAIN.ID(+)) 
    AND (STCD_SPECIES.ID=STCD_SPECIES_DESCR.SPECIES_ID(+) AND 
STPR_STUDY.STD_REF IN (?) 

ich cam über mit Dapper, aber meine Frage ist, wie der Dapper wird das Ergebnis zurück, wenn der Dienst aufgerufen wird (es ist möglich, die Daten im JSON-Format zurückgegeben hat) auch die POCO-Klasse erstellen ich nicht bin Sicher, wenn der Typ jedes Elements ist die Auswahl kann String sein oder wir müssen den entsprechenden Datentyp geben. Meine Fragen könnten albern sein, ich bin neu und auf der Suche nach etwas Hilfe. Danke

Antwort

1

Sie würden normalerweise ein Modell (Klasse mit Requisiten) machen, und dann Dapper bekommen, um es zu bevölkern. Sie könnten dann die Eigenschaften als Strings, Ints, was auch immer Ihren DB-Spaltentypen entspricht, festlegen.

Zum Beispiel:

List<Customer> customers = (List<Customer>)conn.Query<Customer>("SELECT * FROM Customer"); 

In diesem Beispiel ist das Customer-Objekt ist eine Klasse, und die Kunden-Liste ist eine Liste von Kundenobjekten. Sie können dann die Daten rekursiv durchlesen.

Hier ist ein Beispiel dafür, was die Customer-Klasse enthalten könnte:

public class Customer 
    { 
     public int CustomerId; 
     public string Username; 
     public string FirstName; 
     public string LastName; 
    } 

Sie könnten dann zu JSON Serialisierung mit:

string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(customers); 

this helps :)

+0

Dank Delosdos. Aber müssen wir nicht das Get und das Set für diese Spalten verwenden? Wie verwenden wir den Dapper in unserer Anwendung, die nur auf sie verweist? – trx

+1

Dapper wird das Objekt automatisch für Sie füllen, wenn die DB-Spaltennamen mit den Klasseneigenschaftsnamen übereinstimmen. Du würdest also "public string DESCR" hinzufügen. und "öffentliche Zeichenfolge SESSION_NUM;" zu Ihrer Klasse, zum Beispiel – Delosdos

+0

Danke Delosdos. Du bist großartig, aber nur wenige Spalten sind in der Select-Abfrage 'Round' (TO_DATE (TO_CHAR (STRS_SESSION3.END_DATE, 'TT/MM/JJJJ hh24: mi'), 'TT/MM/JJJJ hh24: MI') - TO_DATE (TO_CHAR (STRS_SESSION3.START_DATE, 'tt/mm/jjjj hh24: mi'), 'tt/mm/jjjj hh24: mi')) * 1440) 'Muss ich ihnen auch auf die gleiche Weise geben – trx