2009-07-18 2 views
1

강력하게 형식화 된 결과 집합을 반환하는 여러 저장 프로 시저가 있습니다. 나는 Linq가 그것을 처리하기위한 독자적인 방법을 가지고 있다는 것을 배웠다. 그것은 적어도 덮어 써야한다.Visual Studio에서 Linq 저장 프로 시저 스무딩

내 문제는 Visual Studio에서 강제로 저장 프로 시저를 강제로 다시 작성해야한다는 것입니다. 나는 이것을 무능하게하고 싶다.

여기 내 수동으로 수정 된 파일은 다음과 같습니다

여기
[Function(Name="dbo.spGetNote")] 
    public ISingleResult<Note> spGetNote([Parameter(DbType="Int")] System.Nullable<int> noteId, [Parameter(DbType="Int")] System.Nullable<int> securityUserId) 
    { 
     IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), noteId, securityUserId); 
     return ((ISingleResult<Note>)(result.ReturnValue)); 
    } 

이 무엇인지에 대한 기본값이 :

[Function(Name="dbo.spGetNote")] 
    public ISingleResult<spGetNoteResult> spGetNote([Parameter(DbType="Int")] System.Nullable<int> noteId, [Parameter(DbType="Int")] System.Nullable<int> securityUserId) 
    { 
     IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), noteId, securityUserId); 
     return ((ISingleResult<spGetNoteResult>)(result.ReturnValue)); 
    } 

이것은 작은 것들 중 하나입니다.

다른 부분은 있지만 지저분한 부분이 있습니다. 그것은 진짜 돌아가고 이것을 조정합니다.

우리가 한 일은 강력하게 형식화 된 항목을 반환하는 모든 저장 프로 시저가 자신의 데이터 컨텍스트/클래스이므로 DAL을 업데이트 할 때마다 (Visual Studio) 사용자 정의 변경 사항.

이 두통을 완화하기 위해 할 수있는 일이 있습니까?

이 모든 것을 가져온 이유는 이름 공간을 정리하는 것입니다. Visual Studio에서 프로젝트의 모든 저장 프로 시저를 쪼개지 않고도 네임 스페이스를 변경할 수없고 시간을 보내고 싶지 않습니다. 그 혼란을 치워. Visual Studio에서이를 감지하고 conneciton 문자열을 찾을 수 없다고 말하면 이 포함 된 모든 단일 파일을 다시 빌드해야한다고 글로벌 대체가 충분하지 않은 것으로 보입니다.

답변

2

:하지만 IMO,이 문제를 처리하는 가장 간단한 방법은 유형에 DBML 생성 된 유형에서 투사 할, 저장소 안에 사용자 정의 된 메소드/유형을 부분으로 이동하십시오. 즉

MyDataContext.cs

public partial MyDataContext 
{ 
     [Function(Name="dbo.spGetNote")]   
     public ISingleResult<Note> spGetNote([Parameter(DbType="Int")]... 
} 

public class Note... 

+0

공학부 가드. 나는 그 부분 수업에 대한 이유가 있음을 알았다. 그럼에도 불구하고 여전히 내게 결코 맞지는 않습니다. 감사합니다! –

1

생성 된 코드를 변경하지 마십시오. 그렇게하면 dbml 파일을 볼 때마다 변경 사항이 손실 될 수 있습니다. (시도하지는 않았습니다) 손으로 dbml을 편집하여이 문제를 해결할 수 있습니다 (XML 만 해당). 자동 생성의 DataContext는 부분입니다, 당신이 당신의 자신의 일부를 만들 수 있기 때문에

Note[] SomeFunc(...) { 
    using(var ctx = ...) { 
     return (from row in ctx.SomeSP(...) // row is the dbml type 
      select new Note { // Note is our custom type 
       Id = row.Id, 
       Name = row.Name, 
       // etc 
       }).ToArray(); // or whatever 
    } 
}