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

时间:2009-08-11 01:10:41

标签: linq-to-sql

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

public class SqlWeightTrackerRepository : IWeightTrackerRepository
{
    private Table<WeightTracker> m_weightTrackerTable;

    //... constructor + other code here

    public IQueryable<WeightTracker> WeightTracker
    {
        get { return m_weightTrackerTable; }
    }
}

//导致错误的代码

[IGNORE THIS LINE - &gt;] 私人IMembersRepository m_membersRepository = new SqlWeightTrackerRepository(); [我已经厌倦了并且不正确地加了]

private 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) {}

// STACK TRACE

at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query,QueryInfo queryInfo,IObjectReaderFactory factory,Object [] parentArgs,Object [] userArgs,ICompiledSubQuery [] subQueries,Object lastResult)    at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query,QueryInfo [] queryInfos,IObjectReaderFactory factory,Object [] userArguments,ICompiledSubQuery [] subQueries)    at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)    在System.Data.Linq.DataQuery 1.System.Linq.IQueryProvider.Execute[S](Expression expression) at System.Linq.Queryable.First[TSource](IQueryable 1来源)    在WebUI.Controllers.MembersController.Welcome()在D:\ PROJECTS \ 3DData \ LoseOnlyToday \ WebUI \ Controllers \ MembersController.cs:第59行'

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

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

我完全失败了...一直在谷歌寻找解决方案的时间。发布这是最后的手段。 有人可以帮忙吗?非常感谢!

1 个答案:

答案 0 :(得分:3)

SqlWeightTrackerRepository实现了IWeightTrackerRepository,但您正在尝试将其强制转换为IMembersRepository(带有“IMembersRepository m_membersRepository”)。

变化:

private IMembersRepository m_membersRepository = new SqlWeightTrackerRepository();

为:

private IWeightTrackerRepository m_membersRepository = new SqlWeightTrackerRepository();

你会成为金色的。

相关问题