2011-11-08 2 views
7

.dbml에서와 같이 내 .edmx 파일에 SQL 함수를 추가 할 수 있습니까? 할 수 있다면 어떻게 할 수 있습니까? 할 수 없다면 해결 방법이 있습니까?엔티티 프레임 워크에 SQL 사용자 정의 함수를 추가하는 방법은 무엇입니까?

Google에 알려 봤지만 그 방법에 대한 구체적인 답변을 찾을 수 없습니다.

주어진 대답을 기반으로 저장 프로 시저를 만들고 '가져 오기 기능'을 추가하려고했지만 '저장 프로 시저에서 열을 반환하지 않습니다'라고 말합니다.. 내가 어디에서 잘못하고 있니? 기능 :

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

저장 프로 시저 :

는 더는 엔티티 프레임 워크에서 SQL 사용자 정의 함수에 대한 지원이 내장되어
ALTER PROCEDURE USP_locationSearch 
(@keyword varchar(10)) 
AS 
BEGIN 
SELECT * from dbo.fn_locationSearch(@keyword) 
END 

답변

9

, 가장 좋은 방법은 래핑 저장 프로 시저를 만들 수 없을 것입니다 함수 호출을 호출하고 출력을 반환 한 다음 해당 프로 시저를 EF 모델에 추가합니다.

+0

입니다. 감사합니다. 이 경우에는 dc.mytable의 p에서 var result =와 같은 쿼리를 작성하여 dc.myUSPwithFunc ('id')의 q를 결합 할 수 있습니까? – kandroid

+0

예, 저장 프로 시저를 추가 할 때 함수 가져 오기를 추가해야하며 반환 유형은 복합 형식이어야하며 EF 디자이너는 새로운 복합 형식을 생성 할 수 있습니다. '복합 형'은 실제로 프로 시저가 반환 한 필드를 기반으로하는 새로운 클래스입니다. – keithwarren7

+0

안녕하세요. 나는 그냥 지나치지 않고있다. :(나는 내 게시물을 편집하고 귀하의 답변에 따라 작성하려고하는 코드를 추가했습니다. – kandroid

3

나는이 문제를 해결했다. 내가 한 것은 내 Stored 프로 시저의 결과를 Table 변수에 넣고 거기에서 선택하는 것입니다.

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 

그런 다음 엔티티 프레임 워크에서 저장 프로 시저를 새로 고칩니다. 그런 다음 'function input'을 추가하십시오. 모든게 멋지다.

자세한 내용은 here

관련 문제