我在我的数据库中创建了一个特定的视图(使用左连接加入约5-6个表)。这个视图被添加到我的edmx(实体框架1.0)中。最近我注意到使用edmx(linq到实体然后ToList())获得的一个列记录多次重复,尽管在数据库视图中它们是不同的
Column-N (Expected result/ result from DB view)
---------
data1
data2
data3
data4
data5
Column-N(Actual result generated by entity framework)
---------
data1
data1
data1
data1
data1
我启动了我的SQL分析器,得到了我的应用程序发送到SQL Server的查询,运行它并返回给我预期的结果。
MSDN有类似的帖子here和here,但主持人尚未详细说明如何解决此问题。我的密钥碰巧是GUID
你认为我指出的根本原因 是正确的,问题出在了 应用程序端EF映射,如EF所示 不同的对象映射规则 数据库。当查询结果有 EF从数据库返回 将在应用程序上进行映射 记忆根据自己的设计 逻辑。
采取这些逻辑非常重要 当你设计你的时候考虑到 查看数据库端的查询。一世 认为你应该做一些调整 您的查看查询。
我不确定你是否已经分类 问题,如果没有请提供 与此相关的数据库结构 问题和您拥有的查看查询 写入。
谢谢Binze
之前有人遇到类似的问题吗?
答案 0 :(得分:18)
问题实际上是关键。您必须a)为视图中的每一行都有唯一的标识符。和b)相应地在edmx中映射该密钥。否则,正如您的引用所述,映射逻辑将看到每个后续行和数字,它可以使用它之前返回的相同对象实例
答案 1 :(得分:0)
对我来说同样的问题。
从VS2010向导自动生成实体视图(VReport
),类似于:
class VReport
Line: int (key)
Desc: string
Date: DateTime
当我从数据库中检索记录时,SQL查询正确形成并返回了预期的(和不同的)结果,但实体框架却返回了大量重复的记录。
但相反,Date列/字段也必须在实体键的形成中占用
因此,要解决此问题,我从实体密钥更改了字段的属性:false - >的真强>
class VReport
Line: int (key)
Desc: string
Date: DateTime (key)