2011-11-08 33 views
7

Tôi có thể thêm một hàm SQL vào tệp .edmx của tôi giống như tôi làm trong .dbml không? Nếu tôi có thể, làm thế nào để làm điều đó? Nếu tôi không thể, có cách nào khác không?Làm cách nào để thêm hàm SQL do người dùng định nghĩa vào khung thực thể?

Tôi đã cố gắng sử dụng Google nhưng không thể tìm thấy bất kỳ câu trả lời cụ thể nào về cách thực hiện điều đó.

Dựa trên câu trả lời đã cho Tôi đã tạo thủ tục Đã lưu và cố gắng thêm 'hàm nhập', nhưng nó cho biết 'thủ tục được lưu trữ sẽ trả về không có cột'. Tôi đang làm gì sai? Chức năng:

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

Thủ tục lưu trữ:

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

Trả lời

9

Không có được xây dựng trong hỗ trợ cho SQL tài Chức năng Defined trong Entity Framework, phương pháp tốt nhất của bạn sẽ là để tạo ra một stored procedure mà kết thúc tốt đẹp gọi hàm và trả về kết quả đầu ra của nó, sau đó thêm thủ tục đó vào mô hình EF của bạn.

+0

Cảm ơn. Trong trường hợp đó tôi sẽ có thể viết truy vấn, như var result = from p trong dc.mytable join q trong dc.myUSPwithFunc ('id') ... ?? – kandroid

+0

Có, khi bạn thêm thủ tục lưu sẵn, bạn sẽ cần phải thêm một chức năng nhập khẩu và kiểu trả về sẽ là một kiểu phức tạp, nhà thiết kế EF có khả năng tạo ra một kiểu phức tạp mới cho bạn. 'Loại phức tạp' thực sự là một lớp mới dựa trên các trường được trả về bởi quy trình của bạn. – keithwarren7

+0

Xin chào. Tôi chỉ không nhận được thông qua. :(Tôi đã sửa bài viết của tôi và thêm mã tôi đang cố gắng để viết theo câu trả lời của bạn.Bạn có thể có một cái nhìn? – kandroid

3

Tôi đã giải quyết được vấn đề. Những gì tôi đã làm là, tôi đặt kết quả của thủ tục lưu trữ của tôi vào một biến Bảng và chọn từ đó.

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 

Sau đó làm mới quy trình được lưu trữ trong khung thực thể. Sau đó, thêm 'chức năng đầu vào'. mọi thứ trở nên tuyệt vời.

biết thêm chi tiết về vấn đề này có thể được tìm thấy here

Các vấn đề liên quan