EF Core FromSql返回奇数错误消息



这段代码在调用rawvoter . count()时抛出异常:

 string sql = @"select * from Voters as v
 inner join Homes as h on v.HomeID = h.ID
 inner join Locations as l on h.LocationID = l.ID
 inner join Streets as s on l.StreetID = s.ID
 inner join Cities as c on s.CityID = c.ID
 inner join VoterAgencies as va on v.CountyID = va.CountyID and v.VoterID = va.VoterID
 where (va.AgencyID = @agencyID)
  and (c.Name like '%' + @city + '%')
  and (v.FirstName like '%' + @firstName + '%')
  and (v.LastName like '%' + @lastName + '%')
  and (s.Name like '%' + @street + '%')
  and ((@voterID = 0) or (v.VoterID = @voterID))";
            List<SqlParameter> parameters = new List<SqlParameter>();
            parameters.Add( new SqlParameter( "@agencyID", agencyID ) );
            parameters.Add( new SqlParameter( "@city", model.City ) );
            parameters.Add( new SqlParameter( "@firstName", model.FirstName ) );
            parameters.Add( new SqlParameter( "@lastName", model.LastName ) );
            parameters.Add( new SqlParameter( "@street", model.Street ) );
            parameters.Add( new SqlParameter( "@voterID", model.VoterID ) );
            IQueryable<Voter> rawVoters = _context.Voters
                .AsNoTracking()
                .FromSql( sql, parameters.ToArray() );
            int numVoters = 0;
            try
            {
                numVoters = rawVoters.Count();
            }
            catch( Exception e )
            {
                int i = 9;
                i++;
            }

错误信息是:

"列'ID'被多次指定为'v'。"

我认为这可能是因为EF Core不喜欢"as x"措辞,所以我用表名代替了每个标识符…并得到相同的错误信息。

我很好奇这里发生了什么。

问题是T-SQL返回所有字段(select *)。在EF Core下,返回的字段必须与被返回实体指定的字段匹配,在本例中为Voter。

内部连接,就像我使用的那样,默认情况下返回的远不止Voter字段。

将SQL更改为select v.*(其中v是投票人的别名)解决了问题。

因此您只获得Count,您可以如下所示指定列名。那就没问题了:)

string sql = @"select v.ID from Voters as v

相关内容

最新更新