简介:
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。
每个实体对象包含如下内容:
一个工厂方法:可以通过调用默认的构造函数或工程方法来创建实体对象的新实例。
字段属性:实体对象为它们派生的数据库表的每个列包含一个字段属性。
导航属性:如果数据模型中包含了外键关系,实体对象就会包含帮助访问关联数据库的导航属性。
?