2011-11-08 9 views
7

Posso aggiungere una funzione SQL al mio file .edmx come faccio in .dbml? Se posso, come farlo? Se non posso, c'è qualche soluzione?Come aggiungere la funzione definita dall'utente SQL all'entità framework?

Ho provato a Google ma non riesco a trovare alcuna risposta concreta su come farlo.

In base alla risposta data, ho creato una procedura memorizzata e ho provato ad aggiungere una "funzione di importazione", ma dice "la stored procedure non restituisce alcuna colonna". Dove sto sbagliando? La funzione:

ALTER FUNCTION [dbo].[fn_locationSearch](@keyword varchar(10)) 
RETURNS TABLE 
AS 
RETURN 
(
SELECT CustomerBranch.ID,CustomerBranch.BranchName,CustomerBranch.Longitude,CustomerBranch.Latitue,CustomerBranch.Telephone,CustomerBranch.CategoryID,CustomerBranch.Description 

FROM FREETEXTTABLE (CustomerOffer,*,@keyword) abc INNER JOIN OffersInBranch 
ON abc.[key]=OffersInBranch.OfferID INNER JOIN CustomerBranch ON  OffersInBranch.BranchID=CustomerBranch.ID 
UNION 
SELECT CustomerBranch.ID,CustomerBranch.BranchName,CustomerBranch.Longitude,CustomerBranch.Latitude,CustomerBranch.Telephone,CustomerBranch.CategoryID,CustomerBranch.Description 
FROM CustomerBranch WHERE FREETEXT(*,@keyword) 
) 

La stored procedure:

ALTER PROCEDURE USP_locationSearch 
(@keyword varchar(10)) 
AS 
BEGIN 
SELECT * from dbo.fn_locationSearch(@keyword) 
END 

risposta

9

Non NO è un supporto incorporato per funzioni definite utente SQL in Entity Framework, il tuo approccio migliore sarebbe quello di creare una stored procedure che avvolge il chiama la funzione e restituisce l'output, quindi aggiunge tale procedura al modello EF.

+0

Grazie. In tal caso sarò in grado di scrivere query, come var result = da p in dc.mytable join q in dc.myUSPwithFunc ('id') ... ?? – kandroid

+0

Sì, quando si aggiunge la procedura memorizzata sarà necessario aggiungere una funzione di importazione e il tipo di reso sarà un tipo complesso, il progettista EF ha la capacità di generare un nuovo tipo complesso per te. Il "tipo complesso" è in realtà una nuova classe basata sui campi restituiti dalla procedura. – keithwarren7

+0

Ciao. Non sto attraversando. :(Ho modificato il mio post e ho aggiunto il codice che sto cercando di scrivere secondo la tua risposta. Puoi dare un'occhiata? – kandroid

3

Ho risolto il problema. Quello che ho fatto è, ho messo il risultato della mia procedura memorizzata in una variabile di tabella e selezionare da lì.

ALTER PROCEDURE [dbo].[USP_locationSearch] 
(@keyword varchar(10)) 
AS 
BEGIN 
DECLARE @locationtable TABLE 
(
ID int, 
BranchName varchar(150), 
Longitude varchar(150), 
Latitude varchar(150), 
Telephone varchar(50), 
CategoryID int, 
Description varchar(500) 
) 
INSERT INTO @locationtable SELECT * from dbo.fn_locationSearch(@keyword) 
SELECT * FROM @locationtable 
END 

Quindi aggiornare la stored procedure nel framework entità. Quindi aggiungere "input di funzione". è andato tutto bene.

maggiori dettagli su questo tema si possono trovare here

Problemi correlati