2011-01-21 2 views
1

I가 저장 기능, 예 :포장 LINQ - 투 - SQL 함수 서명

CREATE FUNCTION RegionContains 
(
    @RegionX float, @RegionY float, @RegionRadius float, 
    @ObjectX float, @ObjectY float 
) 
RETURNS bit 
AS 
BEGIN 
    DECLARE @IsContained bit 
    DECLARE @ObjectRadius real 
    SELECT @ObjectRadius = SQRT(POWER(@ObjectX - @RegionX, 2) + POWER(@ObjectY - @RegionY, 2)) 

    IF @ObjectRadius <= @RegionRadius 
     RETURN 1 
    RETURN 0 

END 
GO 

그것은 5 개 플로트 매개 변수를 -하지만 것입니다, 나는이 값을 나타내는 내 C# 프로젝트에서 개체가 있습니다.

Visual Studio를 열고 저장된 함수를 DBML 디자이너로 드래그하면이 모든 double 매개 변수가있는 마법 함수 서명이 나타납니다. DBML을 업데이트 할 때 중단되지 않는 래퍼를 만드는 방법이 있습니까? 두 개의 형식화 된 인수를 사용하여 해당 개체에서 관련 값을 추출한 다음 저장 프로 시저로 전송하는 함수를 만들고 싶습니다. 여전히 linq 쿼리에서 해당 래퍼 함수를 ​​호출 할 수 있습니다. VS가 이것을 지원합니까?

+0

DBML을 업데이트 할 때 래퍼가 끊기는 이유는 무엇입니까? – Jay

+0

글쎄, 나는 생성 된 코드에서 작동하지 않을 것이라고 생각했지만 코드가 다시 생성 될 때마다 덮어 쓰여질 것입니다. 그렇지 않습니까? –

+0

부분 클래스로 래퍼를 추가해야합니다. dbml을 변경하면 래퍼를 변경해야하지만 래퍼의 호출자는 변경되지 않아야합니다. – jlnorsworthy

답변

1

디자이너를 두 번 클릭하십시오. 덮어 쓰지 않는 C# 소스 파일을 만들 수 있습니다.

생성 된 모든 클래스는 partial로 표시되므로 래퍼/도우미 함수를 거기에 추가 할 수 있습니다. 이것은 꽤 일반적인 관행이며, 나는 그것을 많이 사용하는 경향이 있습니다.

업데이트

기능의 사용 사례에 따라, 래퍼는 Linq2SQL 쿼리에서 작동하지 않을 수 있습니다. 이것이 네가하는 일이라면 알려줘. 나는 내 대답을 지울거야.

+0

예, linq2sql 쿼리에서 래퍼를 사용하고 싶습니다. 하지만 생성 된 소스 파일에서 생성 된 linq2sql 호출 가능 메소드 _is_는이를 작성하는 방법이 있어야합니다. –

+0

@Carson Myers : 시도해 볼 수는 있지만, 함수에 '인라인 된'쿼리가되지 않을 것이라고 생각합니다. 따라서 Object에 대한 Linq에 의지해야하며, 불필요한 오버 헤드를 추가해야합니다. – leppie