Как вы говорите динамическим данным ASP .Net использовать хранимые процедуры для выбора? - PullRequest
2 голосов
/ 29 июня 2009

Я вижу, что вы можете указать Вставить, Обновить и Удалить сохраненные процессы, но нет простого способа выбрать сохраненные процессы.

Ответы [ 3 ]

1 голос
/ 11 августа 2009

То, что вы ищете, я считаю, что точно невозможно, потому что сущности должны быть сопоставлены с таблицей или каким-либо видом. Хранимая процедура - это не то, против чего вы можете определить сущность.

Однако, безусловно, можно создать отображение для хранимой процедуры, которое скажет Linq2Sql возвращать сущности при ее выполнении, и поместить метод в ваш класс DataContext для запуска sproc и получения списка сущностей. Эти сущности выполняют те же функции, что и сущности, созданные из обычного отображения таблиц, поэтому при вызове для них метода SubmitChanges () будут использоваться любые объекты вставки, обновления и удаления, созданные вами для этого типа сущности.

Вероятно, лучше всего было бы взглянуть на это прохождение Скоттом Гатри .

0 голосов
/ 11 августа 2009

Это выполнимо, но не с помощью визуального инструмента перетаскивания. Вы должны сделать три вещи:

  1. Создайте новый метод из класса datacontext, который будет вызываться для "получения" ваших данных

    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. Создайте новый шаблон страницы (например, List.aspx) для конкретной таблицы, которую вы хотите в папке CustomPages контролировать для выбора.

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

    }

Посмотрите пример Dynamic Data SP на сайте Codeplex для DD, в котором показано, как это сделать:

http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=14473

0 голосов
/ 07 августа 2009

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

образец

...