Ich sehe, Sie können gespeicherte Prozeduren einfügen, aktualisieren und löschen, aber keine einfache Möglichkeit für SELECT gespeicherte Procs.Wie sagen Sie ASP.Net dynamische Daten gespeicherte Prozeduren für ausgewählte verwenden?
Antwort
Dies ist machbar, aber nicht über das visuelle Drag/Drop-Tool. Sie haben drei Dinge zu tun:
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)); }
}
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.
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
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
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
ok - ich nehme an, ich habe nicht verstanden, welchen Teil Sie brauchten.siehe den Link in der obigen Antwort – mson
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
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.
verwenden Sie LINQ to SQL oder Entitätsrahmen? –
Ich verwende LINK zu SQL – Irwin
Muss es ein SP sein, oder kann es eine Ansicht sein? –