SqlParameter 已包含在另一个 SqlParameterCollection 中

Tha*_*eng 0 pagedlist entity-framework-4 sqlparameter dbcontext

我正在使用 EF DbContext SqlQuery 来使用 PagedList ( https://github.com/TroyGoode/PagedList )获取分页对象列表,但出现以下错误:

“SqlParameter 已包含在另一个 SqlParameterCollection 中”

这是我的存储库代码:

var db = (DbContext)DataContext;
        const string sqlString =
            @"            
            WITH UserFollowerList
            AS 
            ( 
            SELECT uf.FollowId
            FROM UserFollow uf 
            WHERE uf.UserId = @UserId
            )
            SELECT * FROM UserFollowerList uf
            INNER JOIN [User] u ON uf.FollowId = u.UserId
            WHERE IsDeleted = 0
            "
            ;

        var userIdParam = new SqlParameter("UserId", SqlDbType.Int) {Value = userId};

        var userList =
            db.Database.SqlQuery<User>(sqlString, userIdParam)
            .ToPagedList(pageIndex, pageSize);

        return userList;
Run Code Online (Sandbox Code Playgroud)

但是当我在 SqlQuery 语句上调用 ToList 扩展时,它工作正常:

var userList = db.Database.SqlQuery<User>(sqlString, userIdParam).ToList();
Run Code Online (Sandbox Code Playgroud)

分页列表代码:

private PagedList(IQueryable<T> source, int pageIndex, int pageSize)
    {
        TotalItemCount = source.Count();

        PageSize = pageSize;
        PageIndex = pageIndex;
        PageCount = TotalItemCount > 0 ? (int)Math.Ceiling(TotalItemCount / (double)PageSize) : 0;

        HasPreviousPage = (PageIndex > 0);
        HasNextPage = (PageIndex < (PageCount - 1));
        IsFirstPage = (PageIndex <= 0);
        IsLastPage = (PageIndex >= (PageCount - 1));

        ItemStart = PageIndex * PageSize + 1;
        ItemEnd = Math.Min(PageIndex * PageSize + PageSize, TotalItemCount);

        // add items to internal list
        if (TotalItemCount > 0)
            Data = pageIndex == 0 ? source.Take(pageSize).ToList() : source.Skip((pageIndex) * pageSize).Take(pageSize).ToList();
    }
Run Code Online (Sandbox Code Playgroud)

我已经有以下解决方案但没有成功:

var param = new DbParameter[] { new SqlParameter { ParameterName = "UserId", Value = userId }
Run Code Online (Sandbox Code Playgroud)

我可以做什么来修复我遇到的错误?

abb*_*33f 5

context.ExecuteQuery<my_type>(...);仅供参考,当使用 EF 5 DbContext调用 SqlParameters 数组时,我刚刚看到了完全相同的错误消息,其中 my_type 有一个,但 SQL 语句为其中一个参数string返回一个。int

错误确实出现在返回映射中,但它说 SqlParameter 是罪魁祸首,这让我困惑了一段时间。


归档时间:

查看次数:

9454 次

最近记录:

4 年,6 月 前