Stored Procedures med ADO.NET Data Services
Når du har oprettet din ADO.NET Data Service i Visual Studio.NET så kommer den med en default metode - InitializeService. InitializeService bruger vi til at konfigurere vores politik omkring vores service. Vi kan bla. fortælle at vores bagved liggende entiteter skal være AllRead så man f.eks ikke kan skrive til dem.
Når du har mappet dine entiteter til din model med Entity Frameworket og tilføjer en Data Service så har du faktisk adgang til at spørge på dine entiteter - der skal ikke andet til!!!
Så lige pludselig har du adgang til dine data via f.eks REST og kan tilgå dem igennem...øhh..hvor som helst! Jeg kan slet ikke få armene ned igen. Jeg synes simpelthen det er så fedt at vi med så få midler får så meget igen. Endnu en grund til at lave service orienteret software :)
Der er dog en ting som ikke lige falder en i øjnene når man ikke er vant til at arbejde med ADO.NET Data Services, og det er, hvordan får jeg adgang til mine stored procedures ? Det er så super nemt!
public class WebDataService1 : DataService<DanielAnalyticsEntities>
{
public static void InitializeService(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.SetServiceOperationAccessRule( "GetMonthlyVisits", ServiceOperationRights.All );
}
[WebGet]
public int GetMonthlyVisits( int month )
{
return this.CurrentDataSource.GetMonthlyVisitNumber( month );
}
[WebGet]
public List<int> GetMonthlyVisits( int year )
{
return (from c in this.CurrentDataSource.GetMonthlyVisits( year )
select c).ToList();
}
}
Du kalder bare dine mappede stored procedures/funktioner fra CurrentDataSource og wrapper dem i en metode som du nu skal bruge dem. WebGet attributen fortæller at vi kan lave en GET (REST) på metoden, eller som dokumentationen siger: Indicates that a service operation is logically a retrieval operation and that it can be called by the Web programming model.
Nu kan jeg fra browser skrive: https://localhost:1304/WebDataService1.svc/GetMonthlyVisits?year=2008 (læg mærke til jeg kalder funktion navnet direkte som var det en webservice jeg havde med at gøre)
og vupti, så får jeg svar min service som kalder min model som kalder min stored procedure.
Det synes jeg er sjaaaav :0)