在上一篇中简单的介绍了一下有关EF的一些概念,都是小编的一些个人理解,懂的不多,想深入学习的可以从网上查看一些其他资料。

   下面紧接着上一篇所说,来从代码上看一下EF容器是如何实现与后台数据库之间的增删改查的。


   1.EF包装类

   什么是EF包装类呢?举个例子,我们平时用SQL语句写增删改查时,用的都是一些Insert、Update、Delete等语句来实现增删改查,所以我们把放到EF容器的东东也要做一个标签,来指明这个东东是要添加、更新、还是要删除呢。


  正如上图所示就是这么简单的操作,就完成了对数据的增删改查。下面来看一下增删改查的Demo。

  2.EF添加和删除操作

 

<span style="font-family:SimSun;font-size:18px;">        TestEntities db = new TestEntities();
        
        /// <summary>
        /// 添加操作
        /// </summary>
        public void  Add()
        {    
            //创建要添加的实体
            tree tree = new tree()
            {
                pName = "第一条数据",
                subject = "测试"
            };

            //创建一个EF容器对象,并获取当前实体对象的状态管理对象
            DbEntityEntry<tree> entry = db.Entry<tree>(tree);

            //为要添加的对象加上添加的标签
            entry.State = System.Data.EntityState.Added;

            //执行添加操作
            db.SaveChanges();
         
        }

        /// <summary>
        /// 删除操作
        /// </summary>
        public void Delete()
        { 
             //创建要添加的实体
            tree tree = new tree()
            {
                pName = "第一条数据",
                subject = "测试"
            };

            //创建一个EF容器对象,并获取当前实体对象的状态管理对象
            DbEntityEntry<tree> entry = db.Entry<tree>(tree);

            //为要添加的对象加上删除的标签
            entry.State = System.Data.EntityState.Deleted;

            //执行删除操作
            db.SaveChanges();
         
        }</span>


 通过上述操作,就通过EF实现了添加和删除的操作。其实还有另外一种写法,原理基本上是一致的。

 

<span style="font-family:SimSun;font-size:18px;">  TestEntities db = new TestEntities();
        
        /// <summary>
        /// 添加操作
        /// </summary>
        public void  Add()
        {    
            //创建要添加的实体
            tree tree = new tree()
            {
                pName = "第一条数据",
                subject = "测试"
            };

            //此语句相当于为该对象加上添加的标签
           db.tree.Add(tree);

            //执行添加操作
            db.SaveChanges();
         
        }

        /// <summary>
        /// 删除操作
        /// </summary>
        public void Delete()
        { 
             //创建要添加的实体
            tree tree = new tree()
            {
                pName = "第一条数据",
                subject = "测试"
            };

            //先把要删除的实体放置到容器里面
          db.tree.Attach(tree);
            //然后打上要删除的标签
            db.tree.Remove(tree);

            //执行删除操作
            db.SaveChanges();
         
        }
</span>


 3.查询操作

  有了上述的添加和删除,下面来看一下查询的操作。

  有关于EF的查询操作,太多了,就好比我们平时写的SQL语句一样,可以查询出各种条件的数据。

  因为EF上下文里的 DBSet<T> 里的 标准查询运算符 方法,来自于 System.Linq.Queryable 里给 IQueryable接口 添加的扩展方法。而看一下Queryable类中的方法的话,你会大吃一惊,太强大了,将近有200多个查询的方法供我们使用,下面小编只列举一下简单的查询方法。

<span style="font-family:SimSun;font-size:18px;">    /// <summary>
        /// 查询数据
        /// </summary>
        public void Find()
        {

           //采用DbQuery接口中方法,来查询数据
            DbQuery<tree> info = db.tree as DbQuery<tree>;       
            //获得查询出来的数据
            tree tree = info.FirstOrDefault();
           Console.WriteLine(tree.pName);
        }</span>


 4.EF中的更新操作

 如果我们用SQL语句来写更新的话,用到那个字段就更新那个字段,而在EF中还是采用EF包装类的方法,来为我们要修改的类打上修改的标签,然后更新到数据库中。

<span style="font-family:SimSun;font-size:18px;">    TestEntities db = new TestEntities();
        /// <summary>
        /// 更新操作
        /// </summary>
        public void Update()
        {
            
            //编辑要更新的实体的实体
            tree tree = new tree()
            {
                pName = "第一条数据",
                subject = "测试"
            };

            //将对象添加到EF容器中
            DbEntityEntry entry = db.Entry<tree>(tree);
            //先设置对象的包装类型为Unchanged
            entry.State = System.Data.EntityState.Unchanged;
            //为要更新的字段打上更新的标签
            entry.Property("pName").IsModified = true;
            entry.Property("subject").IsModified = true;

            //一次性的更新操作
            db.SaveChanges();

        }</span>



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐