首页 / C# / c# – 实体框架奇怪 – 一列是错误的
c# – 实体框架奇怪 – 一列是错误的
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 实体框架奇怪 – 一列是错误的,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2775字,纯文字阅读大概需要4分钟。
内容图文
首先,我已经有一个解决方法,加上正在发生的数据库正在被替换(全新的db / schema新应用程序)
话虽如此,我想了解为什么会发生这种情况,所以我不会再遇到它.我们很感激.
无论如何:采取这个简单的代码行:
var privs = _olddb.tbl_Privileges.Where(x => x.UserID == userFrom);
很简单.基本上,出现数据的一个例子应该是:
+--------+----------+------------+----------------+------------+
| UserID | RegionID | FacilityID | InitiativeType | AccessType |
+--------+----------+------------+----------------+------------+
| 290 | 27 | 123 | C | F |
| 290 | 27 | 123 | P | F |
| 290 | 27 | 124 | C | F |
| 290 | 27 | 124 | P | F |
+--------+----------+------------+----------------+------------+
相反,虽然……我明白了:
+--------+----------+------------+----------------+------------+
| UserID | RegionID | FacilityID | InitiativeType | AccessType |
+--------+----------+------------+----------------+------------+
| 290 | 27 | 123 | P | F |
| 290 | 27 | 123 | P | F |
| 290 | 27 | 124 | P | F |
| 290 | 27 | 124 | P | F |
+--------+----------+------------+----------------+------------+
注意InitiativeType列….
但是,如果我运行此命令:
var privs =_olddb.Database.SqlQuery<tbl_Privileges>("SELECT * FROM tbl_Privileges WHERE UserID = " + userFrom);
然后我得到正确的输出.
是什么赋予了?
-EDIT-关于marc_s提供的答案
(请记住,我没有制作原始数据库,我害怕修改它,它被一个非常古老的网络应用程序使用..)
老实说,在发布之前没有检查过PK,我真的很傻,道歉.我检查了数据库,该表没有定义PK.所以我检查了EF中的edmx,发现只有RegionID和FacilityID被设置为实体密钥:
所以我更新了edmx模型并将所有字段设置为键(因为我可以在两个权限集之间轻松地拥有4个字段,因为Access Type也有多个值),再次运行脚本,这次它与林克声明.
解决方法:
最有可能的是,在源表上定义主键是一个问题 – 我在查询视图时看到了这种情况(通常没有预定义的主键).
假设你在那张桌子上的PK是(UserID,RegionID,FacilityID)(只是我的猜测,因为它们都被称为..ID – 可能是错误的).当您从SQL Server返回4行时,第一行包含值(290,27,123)作为主键; EF很高兴为您创建具有这些值(以及其他非键列)的对象实例.
现在是第二行 – 再次,PK值是(290,27,123),现在EF变为嗯,我之前看过那些值 – 这必须是同一行,因为主键按定义必须是唯一的!因此,EF将添加其创建的第一个对象实例的第二个副本.
所以你需要确保的是你的主键 – 实际上在表中的数据库中定义,或者EF假设的是视图的主键(默认情况下:所有不可为空的列)对于每一行都是唯一的 – 否则你会看到这样的事情……
这种情况不会发生在你的第二种方法中,你基本上只是执行一个任意的SQL语句 – 在这种情况下,EF将映射每个单独返回的行,而不检查它自己的主键定义(因为你没有真正通过你的DbContext和它的数据库模型)
内容总结
以上是互联网集市为您收集整理的c# – 实体框架奇怪 – 一列是错误的全部内容,希望文章能够帮你解决c# – 实体框架奇怪 – 一列是错误的所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。