SQLite with WebMatrix.WebData.SimpleMembershipProvider Long to Int Cast Error

时间:2013-01-29 01:18:23

标签: asp.net-membership membership-provider webmatrix simplemembership webmatrix-2

我正在尝试使用SimpleMembershipProvider和SQLite在我的网站上启用身份验证。我在Global.aspx初始化了它,可以创建用户,但我无法登录用户。当我尝试拨打WebSecurity.Login([UserName], [Password])时出现以下错误:

Cannot implicitly convert type 'long' to 'int'. An explicit conversion exists (are you missing a cast?)

堆栈跟踪如下(在我调用Login函数之后:

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

我知道SQLite只允许数字列中的Int64值(不是float)。问题是:如何让SimpleMembershipProvider使用Int64值?我查看了堆栈跟踪中列出的违规例程的源代码,似乎所有数字在从Int32函数返回之前都是显式转换的。但是,我没有System.Dynamic.UpdateDelegates.UpdateAndExecute1CallSite.Target的来源,所以我看不到那里发生了什么。更重要的是,这些可能是预先编译的。所以,问题仍然存在,我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

SimpleMembership Provider仅支持SQL Server和SQL Compact 4.0。不支持SQLite。如果要使用SQLite,则必须创建自己的ExtendedMembershipProvider实现。您可以或多或少地复制SimpleMembershipProvider.cs,只需修改出现数据类型冲突的位。