2009-06-29 10 views

Antwort

0

Dies ist machbar, aber nicht über das visuelle Drag/Drop-Tool. Sie haben drei Dinge zu tun:

  1. eine neue Methode aus der Datacontext-Klasse erstellen, die „get“ Ihre Daten

    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. eine neue Seitenvorlage erstellen aufgerufen wird, zu (Z. B. List.aspx) für die bestimmte Tabelle, die Sie im Ordner "CustomPages" verwenden möchten, um die Auswahl zu steuern.

  3. Kontrollieren Sie den Auswahlmechanismus des Gridview.

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

    }

Überprüfen Sie die Dynamic Data SP Probe auf der Codeplex-Website für DD aus, die Ihnen zeigt, wie dies tun:

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

+0

das sieht gut aus. werde hineinschauen. – Irwin

+0

Kann jemand helfen, diese Anweisungen für das Entitätsframework zu aktualisieren? – sirtimbly

-2

Linq-to-SQL ist eine sehr schlechte Idee ...

aber sproc sollten Sie tun, damit, was Sie wollen

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

Ich sehe nicht, wie das, was Sie vorschlagen, eine Lösung sein kann. Ich möchte wissen, wo ich gespeicherte Prozeduren angeben würde, die für meine SELECT-Anweisungen verwendet werden sollen. – Irwin

+0

ok - ich nehme an, ich habe nicht verstanden, welchen Teil Sie brauchten.siehe den Link in der obigen Antwort – mson

+1

Ich möchte betonen, dass nur weil es möglich ist, linq-to-sql zu verwenden, bedeutet nicht, dass Sie es verwenden sollten. linq-to-sql ist in den von mir verwalteten Umgebungen ausdrücklich verboten. – mson

1

Was Sie suchen Ich glaube, dass nicht genau möglich ist, weil Entitäten einer Tabelle oder einer Ansicht irgendeiner Art zugeordnet werden müssen. Für eine gespeicherte Prozedur können Sie keine Entität definieren.

Es ist jedoch sicher möglich, eine Zuordnung für eine gespeicherte Prozedur zu erstellen, die Linq2Sql anweist, Entitäten bei der Ausführung zurückzugeben und eine Methode in Ihre DataContext-Klasse einzufügen, um den Sproc auszuführen und Ihre Entitätsliste abzurufen. Diese Entitäten funktionieren genauso wie Entitäten, die aus einer regulären Tabellenzuordnung erstellt wurden. Wenn Sie also SubmitChanges() aufrufen, werden alle Sprocs Insert/Update/Delete verwendet, die Sie für diesen Entitätstyp erstellt haben.

Wahrscheinlich das Beste, was zu tun wäre, zu sehen this walkthrough by Scott Guthrie.