• MVC 学习(一)Linq to Entities 简单Demo


      Linq定义了一组标准查询符号,标准查询符允许查询作用于所有基于IEnumerable<T>接口源。

      我们看看LINQ的总体架构。如下图所示

          

          EF4.1 数据操作及持久化,常见的是DataBase-First与Code-First。

      DataBase-First是基于已经存在的数据库,利用VS提供的EF设计器创建实体类,数据库对象与实体类的匹配关系,当然,可以手动修改这些自动生成的代码及匹配文件。

      Code-First这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码自动创建数据对象。

      首先来看看 Database-First的Demo。

      首先我们使用EF4.1,即Linq to Entities来创建一个控制台应用程序。

      VS2010中通过ADO.NET Entity Data Model(.edmx文件)生成实体类。

      首先我们将在数据库中建立一个数据库:Student。

      然后建立两张数据表,其中SID与StudentID存在外键的关系(示例,表设计的不合理),在数据库中一定要明显的指出这种关系,否则后面的代码将会存在编译不通过的问题。

      SourceInfo

    SourceID [int] IDENTITY(1,1) NOT NULL,//课程表主键
    SourceName [nvarchar](50),//课程名称
    StudentID [decimal](18, 0) NULL //外键,学生表的主键

      StudentInfo

    SID [decimal](18, 0) NOT NULL,//学生表主键
    SName [nvarchar](50),//学生姓名
    SAge [int] NULL //学生年龄

       我的表中数据如下

      创建.demx 文件,步骤如下图所示

        1、

        2、

        3、

        4、

         点击完成,这样我们就建立好了edmx文件。

         此时VS自动为我们生了一个类StudentEntities,继承类ObjectContext,并且为每一个数据库表映射出实体对象。ObjectContext这个类应该了解。

         初学数据操作,往往都是“增删改查”。

         No1、这里我们找出每个学生的姓名,年龄以及他们所选所以课程名称。代码如下

        Main()函数代码

            StudentEntities StudentDB = new StudentEntities();
                IList<StudentInfo> studentInfo = StudentDB.StudentInfoes.ToList<StudentInfo>();
           //var studentInfo = from c in StudentDB.StudentInfoes
                //                  select c; //Linq

    foreach (var student in studentInfo) { Console.WriteLine(student); string sourceName=string.Empty; foreach (var source in student.SourceInfoes) { sourceName += source.SourceName+" "; } Console.WriteLine("所选课程有:" + sourceName); } Console.ReadKey();

        然后我们重写了Studnet类的ToString()方法,代码如下

     public partial class StudentInfo
        {
            public override string ToString()
            {
                return string.Format("姓名:{0} 年龄:{1}", this._SName, this._SAge);
            }
        }

        运行效果如图 简单的查询功能完成。

             No2、向表StudentInfo插入一条数据,代码如下

     StudentInfo StudentModel = new StudentInfo
                {
                    SID = 4,
                    SName = "汗.斯米尔顿",
                    SAge = 45
                };
                StudentDB.StudentInfoes.AddObject(StudentModel);
                StudentDB.SaveChanges();

        No3、将表StudentInfo钟SID=4的学生年龄改为55

        这里有两种方法可以修改 一种是直接更新 :通过ObjectStateManage来控制修改状态

     StudentInfo StudentModel = new StudentInfo{
                SID = 4,
                SName = "汗.斯米尔顿",
                SAge = 50
                };
    
    
                StudentDB.StudentInfoes.Attach(StudentModel);
                StudentDB.ObjectStateManager.ChangeObjectState(StudentModel, System.Data.EntityState.Modified);
                StudentDB.SaveChanges();

      另外一种是先把数据取出来,然后指定需要修改的列名,最后更新,代码如下

           var ModSID=4;
                var StudentModel = StudentDB.StudentInfoes.SingleOrDefault(c => c.SID == ModSID);
                StudentModel.SAge = 50;
                StudentDB.SaveChanges();

      No4、删除SID=4的学生信息(不涉及课程表),代码如下

            var ModSID = 4;
                var StudentModel = StudentDB.StudentInfoes.SingleOrDefault(c => c.SID == ModSID);
                if (StudentModel != null)
                {
                    StudentDB.DeleteObject(StudentModel);
                    StudentDB.SaveChanges();
                    Console.WriteLine("删除信息成功!");
                }
                else
                {
                    Console.WriteLine("你想删除的信息不存在!");
                }

      这样linq to Entities 简单增删改查就完成了。

  • 相关阅读:
    ParksLink修改密码
    ORA-01940:无法删除当前已链接的用户
    imp导入数据的时候报错:ORA-01658: 无法为表空间 MAXDATA 中的段创建 INITIAL 区
    Linux下查看日志用到的常用命令
    大批量数据高效插入数据库表
    线程中断:Thread类中interrupt()、interrupted()和 isInterrupted()方法详解
    CyclicBarrier、CountDownLatch、Callable、FutureTask、thread.join() 、wait()、notify()、Condition
    Mysql全文索引
    Docker 镜像的常用操作
    Docker 入门
  • 原文地址:https://www.cnblogs.com/xianrongbin/p/3251965.html
Copyright © 2020-2023  润新知