SELECT에 저장 프로 시저를 사용하도록 ASP .NET 동적 데이터를 어떻게 알 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1059863

문제

저장된 Procs 인서트, 업데이트 및 삭제를 지정할 수 있지만 Select 저장된 Procs를위한 간단한 방법은 없습니다.

도움이 되었습니까?

해결책

이것은 가능하지만 시각적 드래그 / 드롭 도구를 통한 것은 아닙니다. 세 가지 일을해야합니다.

  1. 데이터 콘텐츠 클래스에서 데이터를 "받기"위해 호출되는 새 메소드를 만듭니다.

    public partial class DatabaseDataContext {
    [Function(Name = "dbo.Contact_Get")]
    [ResultType(typeof(Contact))]
    [ResultType(typeof(int))]
    public IMultipleResults GetContacts([Parameter(Name = "PageIndex", DbType = "Int")] System.Nullable<int> pageIndex, [Parameter(Name = "PageSize", DbType = "Int")] System.Nullable<int> pageSize, [Parameter(Name = "Sort", DbType = "NVarChar(10)")] string sort, [Parameter(Name = "ContactTypeId", DbType = "Int")] System.Nullable<int> contactTypeId) {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), pageIndex, pageSize, sort, contactTypeId);
        return ((IMultipleResults)(result.ReturnValue));
    }
    

    }

  2. CustomPages 폴더에 원하는 특정 테이블에 대한 새 페이지 템플릿 (List.aspx)을 작성하여 선택을 제어합니다.

  3. 그리드 뷰의 선택 메커니즘을 제어하십시오.

    protected void GridDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e) {
    DatabaseDataContext db = new DatabaseDataContext();
    IMultipleResults results = db.GetContacts(e.Arguments.StartRowIndex, e.Arguments.MaximumRows, e.Arguments.SortExpression, (int?)e.WhereParameters["ContactTypeId"]);
    e.Result = results.GetResult<Contact>().ToList();
    e.Arguments.TotalRowCount = results.GetResult<int>().Single<int>();
    

    }

DD의 CodePlex 사이트의 동적 데이터 SP 샘플을 확인하여 다음 방법을 보여줍니다.

http://aspnet.codeplex.com/release/projectreleases.aspx?releaseid=14473

다른 팁

당신이 찾고있는 것은 내가 믿지 않습니다 바로 그거죠 엔티티는 테이블이나 일종의 모습에 매핑되어야하기 때문에 가능합니다. 저장된 절차는 엔티티를 정의 할 수있는 것이 아닙니다.

그러나 LINQ2SQL이 실행될 때 엔티티를 반환하도록 지시하고 SPROC를 실행하고 엔티티 목록을 얻기 위해 데이터 콘텐츠 클래스에 메소드를 넣는 저장 프로 시저에 대한 매핑을 만들 수 있습니다. 이러한 엔티티는 일반 테이블 매핑에서 생성 된 엔티티와 동일하게 수행하므로 SubMitchAnges () 호출은 해당 엔티티 유형에 대해 만든 삽입/업데이트/삭제 스프로를 사용합니다.

아마도 가장 좋은 일은 Scott Guthrie의 연습.

Linq-to-SQL은 매우 나쁜 생각입니다 ...

그러나이 스프로크는 당신이 원하는 것을 할 수 있어야합니다.

create PROCEDURE [dbo].[usp_GetCompanies] (
    @in_filter nvarchar(2000)
)
AS
    declare @sql nvarchar(max)
    begin
        set @sql = '
        SELECT 
            c.id as company_id, c.name as company_name
        FROM company c
        WHERE id is not null ' + @in_filter + ' order by c.type, c.name ' 
        exec sp_executesql @sql
    end
return

견본

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top