gpt4 book ai didi

linq - Entity Framework 仅返回一个值但列表大小正确

转载 作者:行者123 更新时间:2023-11-30 23:52:07 26 4
gpt4 key购买 nike

Entity Framework 仅返回一个值但列表大小正确

我有一个没有主 ID 的表,我需要获取或选择其中的所有值。

我看到的是,当我用 linq 进行选择时,对象的数量是正确的,但它一遍又一遍地是第一行。

我只是在做这样的事情

List<MyValueType> valuesInDB = myDb.MyValueTypes.ToList();

问题是我可能会得到数千行(这是正确的),但这些行都具有相同的确切数据。

我正在使用 VS 2010 并使用向导创建我的 EF 对象。

最佳答案

问题是 Entity Framework 无法在没有键的情况下使用实体。所以如果你的表没有指定键,entity framework will infer它自己的。 EF 创建的键由所有不可为空的非二进制列组成。

因此,例如,如果您的实体中有单个不可为空的列,并且只有非常小的值集(如枚举),则您将只能“按值”加载单个实体。原因是上下文和使用身份映射模式的状态管理器的内部实现。当从数据库中检索数据记录时,EF 将首先检查实体键并尝试在其内部存储中查找具有相同键的对象。如果找到一个对象,它将使用该对象而不是检索到的数据记录(尽管数据不同)。如果未找到具有该键的对象,则会物化一个新对象并将其添加到内部存储中。

这就是身份映射的目的 - 每个上下文只应创建具有给定键的对象。身份映射是 ORM 中的核心模式。

我也在 this question 中写了关于身份 map 的文章.

关于linq - Entity Framework 仅返回一个值但列表大小正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5345460/

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