I'm trying to use the SimpleMembershipProvider
with SQLite to enable authentication on my site. I have it initialized in my Global.aspx
and can create users, however I can't log users in. I get the following error when I try to call WebSecurity.Login([UserName], [Password])
:
Cannot implicitly convert type 'long' to 'int'. An explicit conversion exists (are you missing a cast?)
The stack trace is as follows (after I make the call to the Login
function:
CallSite.Target(Closure , CallSite , Object ) +146
System.Dynamic.UpdateDelegates.UpdateAndExecute1(CallSite site, T0 arg0) +661
WebMatrix.WebData.SimpleMembershipProvider.VerifyUserNameHasConfirmedAccount(IDatabase db, String username, Boolean throwException) +315
WebMatrix.WebData.SimpleMembershipProvider.ValidateUser(String username, String password) +162
WebMatrix.WebData.WebSecurity.Login(String userName, String password, Boolean persistCookie) +32
I know that SQLite only allows Int64
values in numeric columns (that aren't float
). The question is: how do I get the SimpleMembershipProvider
to work with Int64
values? I had a look at the source code for the offending routines listed in the stack trace and it seems that all numbers are being explicitly cast before being returned from their Int32
functions. However, I don't have the source to System.Dynamic.UpdateDelegates.UpdateAndExecute1
or CallSite.Target
, so I can't see what is going on there. What is more, those are probably pre-compiled. So, the question remains, how can I get this to work?
The SimpleMembership Provider only supports SQL Server and SQL Compact 4.0. SQLite is not supported. If you want to use SQLite, you will have to create your own implementation of ExtendedMembershipProvider. You can more or less copy SimpleMembershipProvider.cs, and just modify the bits where the data type conflict arises.