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)
我可以做什么来修复我遇到的错误?
context.ExecuteQuery<my_type>(...);仅供参考,当使用 EF 5 DbContext调用 SqlParameters 数组时,我刚刚看到了完全相同的错误消息,其中 my_type 有一个,但 SQL 语句为其中一个参数string返回一个。int
错误确实出现在返回映射中,但它说 SqlParameter 是罪魁祸首,这让我困惑了一段时间。
| 归档时间: |
|
| 查看次数: |
9454 次 |
| 最近记录: |