SQL Server Compact 4 rappresenta un'ottima soluzione per sostuire SQL Server, quando la potenza di quest'ultimo non è necessaria. Avendo piena compatibilità con Entity Framework, tendenzialmente adattare una soluzione pensata per SQL Server non è molto complesso: basta adattare la stringa di connessione ed assicurarsi che il modello sia simile.
ASP.NET, sin dalla versione 2.0, supporta un meccanismo di accesso ad aree protette molto flessibile, basato su provider e quindi facilmente estendibile, che prende il nome di Membership e Roles API. Sfortunatamente, non esiste un provider predefinito per SQL CE e quello per SQL Server non è compatibile. In questo caso, dunque, è necessario sviluppare un provider ad hoc, scrivendo opportunamente il codice.
Nel nostro caso, abbiamo deciso di partire con una struttura semplice, basandoci sullo starter kit che sfrutta Entity Framework, disponibile su http://lab.aspitalia.com/64/Starter-Kit-Entity-Framework-Provider-Membership-Roles-API.aspx
Questo starter kit è pensato per Entity Framework e SQL Server, ma può essere facilmente adattato a SQL CE, perchè Entity Framework, a propria volta, lavora con il concetto di provider. Ricostruendo il database (che si trova allegato), è possibile adattare la stringa di connessione, specificando come segue il provider da utilizzare:
<add name="UserEntities" connectionString="metadata=res://*/App_Code.ObjectModel.SecurityModel.csdl|res://*/App_Code.ObjectModel.SecurityModel.ssdl|res://*/App_Code.ObjectModel.SecurityModel.msl;provider=System.Data.SqlServerCe.4.0;provider connection string="Data Source=|DataDirectory|\Authentication.sdf"" providerName="System.Data.EntityClient" />
Non è necessario fare altro, perchè il modello è identico e quindi Entity Framework, semplicemente, adatta le proprie query.
Una volta fatto questo passo, il provider consentirà di sfruttare le funzionalità principali legate a Membership e Roles API, ad esempio relative al login, sfruttando il controllo Login.
I provider per Membership e Roles vanno registrati all'interno del web.config, come segue:
<!-- Membership API--> <membership defaultProvider="DBServerMembership"> <providers> <clear /> <add name="DBServerMembership" type="DBMembershipProvider, App_Code" /> </providers> </membership> <!-- Roles API --> <roleManager enabled="true" defaultProvider="DBServerRoles" cacheRolesInCookie="true" cookieProtection="All"> <providers> <add name="DBServerRoles" type="DBRoleProvider, App_Code" /> </providers> </roleManager>
I provider allegati non implementano tutte le funzionalità, ma grazie alla facilità di utilizzo di Entity Framework, diventa relativamente semplice aggiungere quelle mancanti. Nell'allegato si trova una soluzione completa, con cui testarne il funzionamento. Il codice è pensato per ASP.NET 4.0, ma con alcune accortezze (relative alle differenze tra Entity Framework 1.0 e 4.0), è possibile farne uso anche in presenza di ASP.NET 3.5 SP 1.
Riferimenti utili
Dite addio ad Access con SQL Server Compact 4.0 (speciale)https://www.aspitalia.com/focuson/1207/Dite-Addio-Access-SQL-Server-Compact-4.0.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire la cancellazione di una richiesta in streaming da Blazor
Assegnare un valore di default a un parametro di una lambda in C#
Applicare un filtro per recuperare alcune issue di GitHub
Ordinare randomicamente una lista in C#
Eseguire query verso tipi non mappati in Entity Framework Core
Creare una custom property in GitHub
Creare un'applicazione React e configurare Tailwind CSS
Ottimizzazione dei block template in Angular 17
Sfruttare al massimo i topic space di Event Grid MQTT
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Utilizzare Copilot con Azure Cosmos DB