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
Utilizzare QuickGrid di Blazor con Entity Framework
Gestione CSS in Blazor con .NET 9
Configurare lo startup di applicazioni server e client con .NET Aspire
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Eseguire script pre e post esecuzione di un workflow di GitHub
Proteggere le risorse Azure con private link e private endpoints
Filtering sulle colonne in una QuickGrid di Blazor
Anonimizzare i dati sensibili nei log di Azure Front Door
Usare le navigation property in QuickGrid di Blazor
Escludere alcuni file da GitHub Secret Scanning
Creare una libreria CSS universale: Immagini
Creare agenti facilmente con Azure AI Agent Service