I have problems binding both a telerik RadGrid and a plain vanilla ASP.NET GridView to the results of the following LINQ to entities query. In both cases the grids contain the correct number of rows, but the data from only the first handful of rows is duplicated in all the other rows. I'm directly assigning the return value from this code the the DataSource property on the grids.
public IEnumerable<DirectoryPersonEntry> FindPersons(string searchTerm)
{
DirectoryEntities dents = new DirectoryEntities();
return from dp in dents.DirectoryPersonEntrySet
where dp.LastName.StartsWith(searchTerm) || dp.Extension.StartsWith(searchTerm)
orderby dp.LastName, dp.Extension
select dp;
}
ADDED: This is the alternate plain ADO.NET code that works:
DataTable ret = new DataTable();
using (SqlConnection sqn = new SqlConnection(ConfigurationManager.ConnectionStrings["WaveAdo"].ConnectionString))
{
SqlDataAdapter adap = new SqlDataAdapter("select * from DirectoryPersonList where LastName like '" + searchTerm + "%' order by LastName ", sqn);
sqn.Open();
adap.Fill(ret);
}
return ret;
MORE:
- The query sent to SQL Server by LINQ works.
- Iterating the LINQ query results before returning them results in the same duplications.
- Iterating the LINQ results in the calling method, before binding, results in the same duplications.
UPDATE:
Based on the very logical and fitting advice from Marc Gravel below, I found that the EF designer had made a very uneducated guess at an Entity Key for my entity class, the first field in its list of fields, Department, of which there are only about seven entries shared across all other records.
This is indeed the cause of the duplication. If only I could change or remove the entity key, but this EF designer with all the business logic of an Etch-a-Sketch is admirably committed to repeating it's retarded choice of key while laughing at me locked outside begging to change the key.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…