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
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
C# 12: Cosa c'è di nuovo e interessante
Usare una container image come runner di GitHub Actions
Controllare gli accessi IP alle app con Azure Container Apps
Gestire domini wildcard in Azure Container Apps
Assegnare un valore di default a un parametro di una lambda in C#
Generare file per il download da Blazor WebAssembly
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Creare moduli CSS in React
Eseguire attività pianificate con Azure Container Jobs
Usare lo spread operator con i collection initializer in C#