刚刚接触到了entity framework这个编程技术,觉得挺有意思的,一下是本人的一些初次理解:
首先我觉得这门技术的出现是简化了数据库的操作,平时我都是用sql server做开发的,在没接触到ef这门技术之前,我都是自己写一个数据库操作的类库,
把常用的操作,比如 excuteSql , GetDatatable 等操作写成一个个的函数方法,
相信大家对
public void excuteSql (string sql)
{
using (sqlconnection cn =new sqlconnection(........))
{
sqlcommand cmd =new sqlcommand ( sql ,cn ) ;
cmd.excutenonquery ();
}
}
这段代码熟悉不过了!!!我曾经也写过很多这样的代码!!
现在用了ef之后,有了一些有趣的变化,首先不讲ef最强悍的特性“code-first”
我们按以前的思维使用ef
首先我建了一个数据库叫做 testdb
然后里面有一张表 Students ( studentName , studentAge , id )
这样我们现在 config 文件里面的
<connectionStrings>
<add name="EFDbContext" connectionString="server=.\sqlexpress ; database=SportStore; user=sa ; password=ASdf1234" providerName="System.Data.SqlClient" />
</connectionStrings>
加上连接字符串 , 这个是必须的,大家都明白吧!!!
这里要提醒:这个name是很重要的!
然后写一个student类
public class Student
{
public string StudentName { get; set; }
public int StudentAge { get; set; }
public int ID { get; set; }
}//end class
这里可以看到 student类的属性 和 students 表的字段是一样的 , 只是大小写不一样而已 , 其实我个人比较喜欢大小写一样的!!!
然后写一个总体的上下文类EFDbContext
public class EFDbContext:DbContext
{
public DbSet<Student> students { get; set; }
}//end class
这里可以看到 EFDbContext 的名字是与connectionString的name一模一样的 , 这个非常重要!!!
然后就可以写一个学生仓库类EFStudentRepository类
public class EFStudentRepository
{
EFDbContext context = new EFDbContext();
public IQueryable<Student> Students
{
get
{
return context.students;
}
}
public void SaveStudent(Student Student)
{
if (Student.StudentId == 0)
{
context.Students.Add(Student);
}
else
{
context.Entry(Student).State = EntityState.Modified;
}
context.SaveChanges();
}//end save
public void DeleteStudent(Student Student)
{
context.Students.Remove(Student);
context.SaveChanges();
}
}//end class
这样子看来是不是觉得数据库里面的students表就是一个list<student>数组???
数组的增删改查就是数据库表的增删改查!!
要操作数据库里的students表的内容,就是操作EFStudentRepository这个类!!
写到这里,大家可能不明白为什么要多一个EFContext类,我把EFContext类扩展一下你就明白了:
public class EFDbContext:DbContext
{
public DbSet<Student> students { get; set; }
public DbSet<Student> teachers { get ; set ; }
public DbSet<Student> courses { get ; set ;}
}//end class
就是说EFDbContext这个上下文类是用来控制全体数据库表对象的,而EFStudentRepositary,EFTeacherRepository,EFCourseRepsoity这些是具体的某个对象控制。
这就是像我们以前一样先建好数据库 , 然后再写代码的风格。
等我明白了code-first之后,再写一个博文!!