DataContext returns 除一个表外的所有表的有效数据

DataContext returns valid data for all tables except one

我有一个 C# ClickOnce 应用程序,当我在此代码上调用存储过程时得到一个 'InvalidCastException; Specified Cast is not valid';

        return (from o in db.usp_GetUserByName(userName)
                select o).FirstOrDefault();

在本节中;

    public Database.User GetUserByName(string userName)
    {
        Security.InRole(Security.User_View);

        B.BudgetReporting.Database.BudgetReportingDataContext db = new B.BudgetReporting.Database.BudgetReportingDataContext(Functions.ConnString);
        return (from o in db.usp_GetUserByName(userName)
                select o).FirstOrDefault();
    }

我认为错误实际上是在上一节中的 'db' 声明中;一旦应用程序处于调试模式并且我将鼠标悬停在 'db' 上并展开加号,我可以看到不同的 tables(所以我假设它连接到数据库正常,所以不是 ConnString 导致问题),我可以看到所有 table 中的数据,除了 'Users' table。

当我展开“用户”部分并展开 'Results view' 时,它显示 "Expanding the results view will enumerate the IEnumerable" 并带有刷新图标。我单击刷新图标,然后得到“base{system.SystemException}|{"Specified cast is not valid"}。所以我猜这是 returning null 然后导致 return 给出错误。

这段代码工作正常,但现在不行了,我不确定为什么或如何继续跟踪它。我在代码备份的同时恢复了一个数据库,它具有与当前数据库相同的用户 table 结构。

非常感谢任何线索,因为我需要尽快使用新证书部署当前版本。

堆栈跟踪:

[External Code] 
B.BudgetReporting.BusinessLogic.dll!B.BudgetReporting.BusinessLogic.Service.GetUserByName(string userName) Line 1663 + 0x7a bytes   C#
M.I.Beta.exe!B.BudgetReporting.Forms.Login.LoginCmd_Click(object sender, System.EventArgs e) Line 78 + 0x33 bytes    C#
[External Code] 
M.I.Beta.exe!B.BudgetReporting.Forms.MainMDI.checkLogin() Line 135 + 0xa bytes   C#
M.I.Beta.exe!B.BudgetReporting.Forms.MainMDI.MainMDI() Line 78 + 0x8 bytes   C#
M.I.Beta.exe!B.BudgetReporting.Program.Main() Line 22 + 0x15 bytes   C#
[External Code] 

(注意:对 M、I 和 B 进行了一些轻微的编辑,以进行一些混淆)

EDIT1:GetUserByName 是:

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.usp_GetUserByName")]
    public ISingleResult<User> usp_GetUserByName([global::System.Data.Linq.Mapping.ParameterAttribute(Name="UserName", DbType="VarChar(255)")] string userName)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), userName);
        return ((ISingleResult<User>)(result.ReturnValue));
    }

问题最终成为数据库中的一个问题,其中一个字段被引用为 int 但实际上是一个字符串,导致注意到转换问题。