实际项目中遇到EF实体类的操作问题及操作方法
之前一直做ASP,都是直接写数据库操作语句,但是现在使用linq或者EF了,具体数据库操作不会了,遇到几个问题,然后经过查找资料解决了,记录一下。
一、遇到序列化问题
遇到循环引用问题,我的项目是一个学生表,有关联classID和成绩表,造成循环引用,查询了一下可以用如下博客的做法,将循环忽略,这样就会不报错输出,但是输出的内容不是你想要的了,想得到原来的内容,就要对输出的内容做处理才行。我的做法是将查询到的数据重新赋值给一个自定义的类,然后将自定义的类再序列化,后来发现这个操作其实跟自定义序列化数据起的作用是一样的。
http://www.cnblogs.com/kangao/p/5382733.html
二、遇到类似in查询问题
可以采用contains,可以使用表的某字段contains(条件),也可以反过来条件contains(表的某字段)。
三、遇到同表多条件联合查询问题
建议使用级联操作就好了,一个list<类>后增加多个where查询即可解决
四、遇到多表联合查询问题
我的项目是用户输入查询条件,比如班级名称,我需要根据查询条件找到班级ID,然后根据班级ID找到改班级的学生名单,但是由于用户输入的条件可能不全,或者根据用户的输入条件会得到多个班级ID,这样再去查找学生名单。没办法用where那一套了, 然后就用了这样一个联合写法:
var ClassID = from Class in ef.StudentClasses join student in ef.Students on Class.ClassId equals student.ClassId where Class.ClassName.Contains(ClassName) select Class.ClassId;
然后再使用:
StudentList = StudentList.Where(a => classID.Contains(a.ClassId)).ToList();
五、序列化时间带T问题
网上一搜一大堆,这个方法最好用了,只是IsoDateTimeConverter 在命名空间using Newtonsoft.Json.Converters;下,要增加引用
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
JsonConvert.SerializeObject(要序列化的对象,timeFormat);
搞定!