entity framework初学--第一篇



刚刚接触到了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之后,再写一个博文!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值