2011-11-08 12 views
7

¿Puedo agregar una función SQL a mi archivo .edmx como hago en .dbml? Si puedo, ¿cómo hacer eso? Si no puedo, ¿hay alguna solución?¿Cómo agregar la función SQL definida por el usuario al marco de la entidad?

Intenté Google, pero no encuentro ninguna respuesta concreta sobre cómo hacerlo.

Basado en la respuesta dada He creado un procedimiento Almacenado e intenté agregar una 'función de importación', pero dice 'el procedimiento almacenado no arroja la columna'. ¿Dónde estoy haciendo mal? La función:

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) 
) 

el procedimiento almacenado:

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

Respuesta

9

No existe soporte incorporado para funciones definidas por el usuario de SQL en el marco de la entidad, el mejor enfoque sería crear un procedimiento almacenado que envuelve la llamar a la función y devuelve su resultado, luego agregue ese procedimiento a su modelo EF.

+0

Gracias. En ese caso, podré escribir una consulta, como var result = from p en dc.mytable join q en dc.myUSPwithFunc ('id') ... ?? – kandroid

+0

Sí, cuando agregue su procedimiento almacenado necesitará agregar una función de importación y el tipo de devolución será de tipo complejo, el diseñador EF tiene la capacidad de generar un nuevo tipo complejo para usted. El 'tipo complejo' es realmente una nueva clase que se basa en los campos devueltos por su procedimiento. – keithwarren7

+0

Hola. Simplemente no estoy llegando. :(He editado mi publicación y he añadido el código que intento escribir de acuerdo con su respuesta. ¿Puede echar un vistazo? – kandroid

3

He resuelto el problema. Lo que hice fue poner el resultado de mi procedimiento almacenado en una variable de tabla y seleccionar desde allí.

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 

A continuación, actualice el procedimiento almacenado en el marco entidad. Luego agregue 'entrada de función'. todo fue genial.

detalles más sobre este tema se pueden encontrar here

Cuestiones relacionadas