使用的EF框架,采用的是DBFirst,在实际的使用过程中,发现一个很严重的问题,即使用linq查询数出来的数据是错的,请见下面的图:
1.下面是Linq代码,及调试过程中的参数值
方法:
public wygl_res_Floor Query(string precinctId, string buildingId,string floorId) { var q = from t in context.wygl_res_Floor where t.PrecinctID.Equals(precinctId) && t.BuildingID.Equals(buildingId)&&t.FloorID.Equals(floorId) select t; return q.FirstOrDefault(); }
调试的参数图,参数的值见监视里面值:
执行的结果图:
看上面的结果,明显的不对啊,我传的参数BuildingID是001,查询出来的结果却是008,把生成的sql放到数据库查询的结果是对的,数据库的结果见下图:
看到这里整个人就不好了,不知道哪里出了问题,在mapping中的代码如下:
public wygl_res_FloorMap() { this.HasKey(t => t.ID); this.HasKey(t => t.PrecinctID); this.HasKey(t => t.BuildingID); this.HasKey(t => t.FloorID); this.Property(t => t.PrecinctID).HasMaxLength(20); this.Property(t => t.BuildingID).HasMaxLength(20); this.Property(t => t.FloorID).IsRequired().HasMaxLength(20); this.Property(t => t.FloorName).HasMaxLength(20); this.ToTable("wygl_res_Floor"); this.Property(t => t.ID).HasColumnName("ID"); this.Property(t => t.PrecinctID).HasColumnName("PrecinctID"); this.Property(t => t.BuildingID).HasColumnName("BuildingID"); this.Property(t => t.FloorID).HasColumnName("FloorID"); this.Property(t => t.FloorName).HasColumnName("FloorName"); }
现在除了这里出现这种错误以外,其它的表也出现了相同的问题,不知道如何排错了,特向园子里面的大神请教
自己解决了,是在mapping里面设置了多个key,只保持一个Key就不存在这个情况,多KEY的情况再测试
看着没有问题啊...
bu过我比较好奇非空字段xxx查询是 xxx=sss or xxx=null吗
难道是大小写的问题?用的啥数据库啊
bu对,要不然重新建一下实体类试试?
ni试试first,,没有ordefault呢
@猝不及防: 数据库是sql server 2014,实体类没有问题,重建也是一样吧.
看最终执行的sql吧.
最终执行的SQL放到数据库查询,结果是对的,我也有截图放在下面