【问题标题】:SQLite with WebMatrix.WebData.SimpleMembershipProvider Long to Int Cast ErrorSQLite 与 WebMatrix.WebData.SimpleMembershipProvider Long to Int Cast 错误
【发布时间】:2013-01-29 01:18:22
【问题描述】:

我正在尝试将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)。问题是:如何让 SimpleMembershipProviderInt64 值一起使用?我查看了堆栈跟踪中列出的违规例程的源代码,似乎所有数字在从它们的Int32 函数返回之前都被显式转换。但是,我没有System.Dynamic.UpdateDelegates.UpdateAndExecute1CallSite.Target 的来源,所以我看不到那里发生了什么。更重要的是,这些可能是预编译的。所以,问题仍然存在,我怎样才能让它工作?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这就是我所怀疑的。我希望有另一种方法。我最终编写了自己的自定义提供程序(使用 EF,这非常容易)。复制 SimpleMembershipProvider.cs 时出现了太多问题。不过感谢您的帮助。希望他们最终会支持 SQLite,特别是因为它现在是开源的。
    • 我怀疑“他们”(微软)是否会产生一个 SQLite 会员提供程序,因为您可以很容易地创建自己的。这就是提供者模型的全部意义——这样他们就不必为每个可能的数据源编写代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2015-06-07
    • 2011-05-08
    • 2022-01-09
    • 2010-12-01
    • 2020-09-03
    相关资源
    最近更新 更多