我使用以下代码:
List<vw_GetIMeasurements> Imeasurements = context.vw_GetIMeasurements.Where(f => f.MEMBERID == userID).Distinct().ToList();
这会返回一个包含12个值的列表,但是这些值总是相同的(即使它们不在数据库中。(即使它们是不同的,也应该解决这个问题)
DB:
返回的原始值也是错误的。 这个问题的原因是什么?如何解决?
答案 0 :(得分:8)
之前我遇到过这个问题 - 事实证明该视图没有设置唯一的entity keys
- 请确保您的视图的主要密钥是由实体框架自动创建的...确实是唯一的...
答案 1 :(得分:2)
我有一个类似的问题 - 数据库视图在SQL服务器中看起来很好但是在调试时,重复的行出现在行共享特定属性值的位置。
我发现其中一个重要的唯一键是来自外连接表 - 因此有可能为空 - 并且模型没有分配为唯一键。
我能够通过将此字段设置为ISNULL(字段,'')来解决此问题 - 确保始终返回值 - 并且在更新时,模型正确地将字段解释为唯一且作为复合键的一部分并且行正确返回。
我知道有人可能认为视图设计有问题(即我不应该使用外连接),但在这种情况下,特别需要外连接。修复工作正常,因为即使多次返回“”,复合键仍然是唯一的。
答案 2 :(得分:0)
也许尝试更简单的语法
var measure = from f in context.vw_GetIMeasurements
where f.MEMBERID == userID
select f;
这种事对我有用..
答案 3 :(得分:0)
这个问题实际上是理查德所描述的。但是我无法选择正确的“唯一密钥”,因此这会导致更多问题。
我通过创建自定义类并在SQL中创建它来解决我的问题。我还将我的Select限制为3列中的2列。
List<Measurement> result = (from f in context.vw_GetIMeasurements where f.MEMBERID == userID select new Measurement { Category = f.atcmCATEGORYCODEID, Size = f.imMeasurementNumber }).ToList();
测量是自制类。