2009-06-29 8 views

Répondre

0

Ceci est faisable mais pas via l'outil de glisser/déposer visuel. Vous devez faire trois choses:

  1. créer une nouvelle méthode de la classe DataContext qui sera appelée à « obtenir » vos données

    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. Créer un nouveau modèle de page (List.aspx par exemple) pour la table particulière que vous voulez dans le dossier CustomPages pour contrôler la sélection.

  3. Contrôler le mécanisme de sélection de la grille.

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

    }

Vérifiez le échantillon de données dynamique SP sur le site CodePlex pour DD qui vous montre comment faire:

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

+0

cela a l'air génial. va regarder dedans. – Irwin

+0

Quelqu'un peut-il aider à mettre à jour ces instructions pour le framework d'entité? – sirtimbly

-2

LINQ to SQL est une très mauvaise idée ...

mais cette sproc devrait vous permettre de faire ce que vous voulez

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 

sample

+0

Je ne vois pas comment ce que vous proposez peut être une solution. Je veux savoir où je voudrais spécifier les procédures stockées à utiliser pour mes instructions SELECT – Irwin

+0

ok - je suppose que je n'ai pas compris quelle partie vous avez besoin.voir le lien dans la réponse ci-dessus – mson

+1

Je voudrais souligner que juste parce qu'il est possible d'utiliser linq-to-sql, ne signifie pas que vous devriez l'utiliser. linq-to-sql est expressément interdit dans les environnements que je gère. – mson

1

Qu'est-ce que vous cherchez Je crois ne pas exactement possible, parce que les entités doivent être mappés à une table ou une vue quelconque. Une procédure stockée n'est pas quelque chose que vous pouvez définir une entité contre.

Cependant, il est certainement possible de créer un mappage pour une procédure stockée qui indique à Linq2Sql de renvoyer des entités lors de son exécution et de mettre une méthode dans votre classe DataContext pour exécuter le sproc et obtenir votre liste d'entités. Ces entités fonctionnent de la même manière que les entités créées à partir d'un mappage de table normal; l'appel de SubmitChanges() sur celles-ci utiliserait alors les sprocs Insert/Update/Delete que vous avez créés pour ce type d'entité.

Probablement la meilleure chose à faire serait de regarder this walkthrough by Scott Guthrie.

Questions connexes