PagedList ( https://github.com/TroyGoode/PagedList ) を使用してページ オブジェクトのリストを取得するために EF DbContext SqlQuery を使用していますが、次のエラーが発生します。
「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;
しかし、SqlQuery ステートメントで ToList 拡張機能を呼び出すと、正常に動作します。
var userList = db.Database.SqlQuery<User>(sqlString, userIdParam).ToList();
PagedList コード:
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();
}
私はすでに以下の解決策を成功させていません:
var param = new DbParameter[] { new SqlParameter { ParameterName = "UserId", Value = userId }
発生しているエラーを修正するにはどうすればよいですか?