简体   繁体   English

将 Include 与参数化输入一起使用时,Entity Framework Core 抛出

[英]Entity Framework Core throws when using Include with parameterized input

In EF Core 2.2.6 I need to construct a dynamic query with parameterized input.在 EF Core 2.2.6 中,我需要使用参数化输入构造一个动态查询。 I start by constructing the statement:我从构造语句开始:

var rawSql = new StringBuilder("SELECT * FROM dbo.Projects ");
var sqlParameters = new List<SqlParameter>();

rawSql.Append(string.Format("WHERE ProjectId < @param"));
sqlParameters.Add(new SqlParameter("@param", "20"));

Then I execute it:然后我执行它:

var projects = await _context.Projects.FromSql(rawSql.ToString(), sqlParameters.ToArray())
    .ToListAsync();

This works.这行得通。 But if I add an Include it throws但是如果我添加一个Include它会抛出

ArgumentException: The SqlParameter is already contained by another SqlParameterCollection` ArgumentException:SqlParameter 已包含在另一个 SqlParameterCollection 中

var projects = await _context.Projects.FromSql(rawSql.ToString(), sqlParameters.ToArray())
    .Include(p => p.Managers)
    .ToListAsync();

What am I doing wrong?我究竟做错了什么?

Try naming the parameter in a more concise way, perhaps the key "param" is already being used:尝试以更简洁的方式命名参数,也许键“param”已经被使用:

var rawSql = new StringBuilder("SELECT * FROM dbo.Projects ");
var sqlParameters = new List<SqlParameter>();

rawSql.Append(string.Format("WHERE ProjectId < @projectId"));
sqlParameters.Add(new SqlParameter("@projectId", "20"));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM