Linq 存储库模式“指定的强制转换无效”错误

Posted

技术标签:

【中文标题】Linq 存储库模式“指定的强制转换无效”错误【英文标题】:Linq Repository pattern "Specified cast is not valid" Error 【发布时间】:2009-08-11 01:10:41 【问题描述】:

我有以下课程(我已经修剪了代码):

public class SqlWeightTrackerRepository : IWeightTrackerRepository

    private Table<WeightTracker> m_weightTrackerTable;

    //... constructor + other code here

    public IQueryable<WeightTracker> WeightTracker
    
        get  return m_weightTrackerTable; 
    

//导致错误的代码

[忽略此行 ->] private IMembersRepository m_membersRepository = new SqlWeightTrackerRepository(); [我很累,添加不正确]

私有 IWeightTrackerRepository m_weightTrackerRepository = new SqlWeightTrackerRepository();

//...一些其他代码

        if (report.PreviousWeightTrackerId == 0)
            try  //If no session was found try find an entry in the database
                var tmp = 
                    (from x
                       in m_weightTrackerRepository.WeightTracker
                    where x.MemberId == report.Member.MemberId
                  orderby x.Created_On descending
                   select x).First();

             catch (Exception e) 

//堆栈跟踪

在 System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,QueryInfo queryInfo,IObjectReaderFactory 工厂,Object[] parentArgs,Object[] userArgs,ICompiledSubQuery[] subQueries,Object lastResult) 在 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(表达式查询,QueryInfo[] queryInfos,IObjectReaderFactory 工厂,Object[] userArguments,ICompiledSubQuery[] subQueries) 在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询) 在 System.Data.Linq.DataQuery1.System.Linq.IQueryProvider.Execute[S](Expression expression) at System.Linq.Queryable.First[TSource](IQueryable1 来源) 在 D:\PROJECTS\3DData\LoseOnlyToday\WebUI\Controllers\MembersController.cs:line 59' 中的 WebUI.Controllers.MembersController.Welcome() 处

此代码给出异常“指定的强制转换无效”

我知道查询有效——我使用 scott gu 的 linq 调试器来检查它——它返回 3 行... (调试器:http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx)

我完全失败了......一直在谷歌上寻找几个小时的解决方案。发布这是最后的手段。 有人可以帮忙吗?将不胜感激!

【问题讨论】:

【参考方案1】:

SqlWeightTrackerRepository 实现了 IWeightTrackerRepository,但您试图将其转换为 IMembersRepository(w/“IMembersRepository m_membersRepository”)。

变化:

private IMembersRepository m_membersRepository = new SqlWeightTrackerRepository();

到:

private IWeightTrackerRepository m_membersRepository = new SqlWeightTrackerRepository();

你会是金色的。

【讨论】:

没有问题 - 确保标记正确答案,以便其他人受益。

以上是关于Linq 存储库模式“指定的强制转换无效”错误的主要内容,如果未能解决你的问题,请参考以下文章

System.InvalidCastException:指定的强制转换无效。错误

指定的强制转换无效错误

尝试在 C# 中迭代​​ IEnumerable<int> 时,指定的强制转换无效

Xamarin 形式:System.InvalidCastException:“指定的强制转换无效。”

在OptionSet属性的FetchXML查询中,System.InvalidCastException(“指定的强制转换无效。”)

DataReader:指定的强制转换无效 (Int32)