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

时间:2025-02-09 11:36:29

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

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

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

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](, ) NOT NULL,//学生表主键
SName [nvarchar](),//学生姓名
SAge [int] NULL //学生年龄

  我的表中数据如下MVC 学习(一)Linq to Entities 简单DemoMVC 学习(一)Linq to Entities 简单Demo

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

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

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

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

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

     点击完成,这样我们就建立好了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);
}
}

    运行效果如图MVC 学习(一)Linq to Entities 简单Demo 简单的查询功能完成。

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

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

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

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

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

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

       var ModSID=;
var StudentModel = StudentDB.StudentInfoes.SingleOrDefault(c => c.SID == ModSID);
StudentModel.SAge = ;
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 简单增删改查就完成了。