gpt4 book ai didi

.net - 使用 LINQ to Entities 进行数据绑定(bind)时出现重复行

转载 作者:行者123 更新时间:2023-12-04 00:08:21 25 4
gpt4 key购买 nike

我在将 Telerik RadGrid 和普通的 ASP.NET GridView 绑定(bind)到以下 LINQ 到实体查询的结果时遇到问题。在这两种情况下,网格都包含正确的行数,但只有前几行的数据在所有其他行中重复。我直接将此代码的返回值分配给网格上的 DataSource 属性。

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;
}

已添加:这是可以使用的备用纯 ADO.NET 代码:
    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;

更多 :
  • LINQ 发送到 SQL Server 的查询有效。
  • 在返回它们之前迭代 LINQ 查询结果会导致相同的重复。
  • 在绑定(bind)之前迭代 LINQ 会导致调用方法产生相同的重复。

  • 更新 :
    根据下面 Marc Gravel 非常合乎逻辑和贴切的建议,我发现 EF 设计者对我的实体类的实体键做出了非常未受教育的猜测,它的字段列表中的第一个字段,部门,其中只有大约有七个条目在所有其他记录中共享。

    这确实是重复的原因。如果我可以更改或删除实体 key ,但这位具有 Etch-a-Sketch 的所有业务逻辑的 EF 设计师令人钦佩地致力于重复其迟缓的 key 选择,同时 mock 我被锁在外面乞求更改 key 。

    最佳答案

    在我看来,您的主键很糟糕。 LINQ-to-SQL 和 EF 的“身份管理”方面意味着当它看到相同对象类型的相同主键值时,它必须返回相同的实例。

    例如,给定数据:

    id     | name       | ...
    -------+------------+------
    1 | Fred | ...
    2 | Barney | ...
    1 | Wilma | ...
    1 | Betty | ...

    那么 如果它认为 id是主键 当从 LINQ 遍历对象时,它被迫给你“Fred”、“Barney”、“Fred”、“Fred”。本质上,当它看到 id 1 再次,它甚至不查看其他列 - 它只是使用 id 获取实例1 来自身份缓存 - 并为您提供它之前提供给您的同一个 Fred 实例。如果它不认为 id是主键,它会将每一行视为一个单独的对象(如果它在一个字段中与另一条记录具有相同的值怎么办 - 这并不完全不寻常)。

    我建议检查您标记为主键的任何字段(在您的 DBML/EDM 模型中)是否真的每行都是唯一的。在上述情况下, id column 显然不代表唯一标识符,因此不适合作为主键。只需在 LINQ-to-SQL/EF 设计器中取消标记即可。

    更新:特别是在设计器中查看各种属性的“实体键”属性——尤其是在查询 View 时。检查“实体键”是否仅针对合适的列(即使行唯一的列)设置为 true。如果设置不正确,请将其设置为 false。这也显示为黄色 key 图标 - 这应该只出现在真正是记录唯一标识符的事物上。

    关于.net - 使用 LINQ to Entities 进行数据绑定(bind)时出现重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1001847/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com