SELECT에 저장 프로 시저를 사용하도록 ASP .NET 동적 데이터를 어떻게 알 수 있습니까?
-
21-08-2019 - |
문제
저장된 Procs 인서트, 업데이트 및 삭제를 지정할 수 있지만 Select 저장된 Procs를위한 간단한 방법은 없습니다.
해결책
이것은 가능하지만 시각적 드래그 / 드롭 도구를 통한 것은 아닙니다. 세 가지 일을해야합니다.
데이터 콘텐츠 클래스에서 데이터를 "받기"위해 호출되는 새 메소드를 만듭니다.
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)); }
}
CustomPages 폴더에 원하는 특정 테이블에 대한 새 페이지 템플릿 (List.aspx)을 작성하여 선택을 제어합니다.
그리드 뷰의 선택 메커니즘을 제어하십시오.
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