日期:2014-05-20  浏览次数:20878 次

LINQ to Entities学习笔记(1)

简介:

LINQ to Entities是Entity Framework的一部分并且取代LINQ to SQL作为在数据库上使用LINQ的标准机制。

?

微软把开发重点从LINQ to SQL转移到了LINQ to Entities,并且宣布LINQ to SQL不再提供更新,LINQ to SQL现在仍被支持但不推荐。

?

生成数据模型:

Entity FrameWork依赖于一个数据模型来使用LINQ to Entities进行查询。表中的行被转换为C#对象的实例,表中的列是这些对象的属性。数据库架构和数据模型对象的映射是Entity FrameWork的核心,同时也是LINQ to Entities能够工作的根本。

?

生成模型的步骤:

右击App_Code目录,单击“添加新项”,从项目模板里选择“ADO.NET实体数据模型”。设置要创建的文件的名称后,单击“确定”按钮。

可以选择生成一个空的模型,然后手工增加类,然后根据模型生成数据库。

还可以从一个已经存在的数据库生成模型,在“实体数据模型向导”里选择“从数据库生成”并配置数据库连接。可以选择要包含在数据模型里的数据库表、视图和存储过程。应该选择全部表并选中“确定所生成对象的单复数形式”选项。

vs会为你选择的数据库元素创建模型图。项目会自动生成两个文件:

Model.edmx。这个XML文件定义数据模型的架构。

Model.Designer.cs。这个C#代码文件包含数据模型的映射对象。

数据模型类 Model.Designer.cs

你不应该手动更改Model.Designer.cs文件,因为这个文件的内容会被数据模型重新生成,从而造成修改丢失。

该文件包含两端代码区域:Contexts和Entiteis。

1.派生的对象上下文类

Model.Designer.cs文件中定义的第一个类从ObjectContext派生。

这个类有3个构造函数,默认空的构造函数,使用生成实体数据模型时配置的连接字符串进行连接。

还可以使用带String参数的数据库连接字符串构造,还可以使用带EntityConnection参数的数据库连接对象进行构造。

派生的ObjectContext类包含了数据模型中包含的每个表的属性。每个属性都是一个强类型的ObjectSet。具体类型为它引用的实体类的类型。

?

示例:

public partial class Default : System.Web.Page{

protected void Page_Load(object sender, EventArgs e){

NorthwindEntities enty = newNorthwindEntities();

// 把所有国家为中国的职员查询显示到GridView。

?

IEnumerable<Employee> emp = from e in enty.Employees
where
e.country.StartsWith("中国")
select
e;

GridView1.DataSource = emp;

GridView1.DataBind();

?

?

// 把所有国家为中国的职员的ID和姓显示到GridView。

// 注意这里用了var声明,因为select时只查询了ID和FirstName,不能使用IEnumerable<Employee>

?

varemp2 = from e in enty.Employees
where
e.country.StartsWith("中国")
select
new{ID = e.ID,FirstName=e.FirstName};

GridView2.DataSource = emp2;

GridView2.DataBind();

}

}

2.实体类

用于把数据库表的记录映射到C#对象。如果选中了“确定所生成对象的单复数形式”选项,那么像Employees这样的表创建的实体对象名称是Employee

每个实体对象包含如下内容:

一个工厂方法:可以通过调用默认的构造函数或工程方法来创建实体对象的新实例。

字段属性:实体对象为它们派生的数据库表的每个列包含一个字段属性。

导航属性:如果数据模型中包含了外键关系,实体对象就会包含帮助访问关联数据库的导航属性。

?