EntLib.com 基于Microsoft .Net Framework / ASP.Net / C# / AJAX 平台构建的标准电子商务系统

ADO.NET Entity Framework 入门示例向导(附Demo程序下载)- 系列2 选 项
entlibforum
发表时间 : Sunday, August 24, 2008 2:12:17 PM - 【楼 主】
entlibforum

等级: 管理员级别
组: 管理员组 , 注册会员组

注册时间: 8/17/2008
帖子数量: 190
发帖积分: 563
所在地: EntLib.com 开源论坛小组
ADO.NET Entity Framework 入门示例向导(附Demo程序下载)- 系列2
 
 
本篇文章在《ADO.NET Entity Framework 入门示例向导(附Demo程序下载)》基础上,进一步演示如何使用EntityClient 新数据提供程序、对象服务(Object Services)和LINQ to Entities与概念模型交互。Entity Framework 使用概念层、映射层和逻辑层将关系数据库结构抽象化。EntityClient和Entity SQL(新语言-实体SQL)可以与概念层的实体数据模型(Entity Data Model - EDM)交互。
 
如下是Entity Framework 组件图:
 

 
首先,在Class Library 项目中增加ADO.NET Entity Data Model文件,具体请参考《ADO.NET Entity Framework 入门示例向导(附Demo程序下载)》。
 
下面分别演示如何使EntityClient、对象服务Object Services、LINQ to Entities 访问概念数据模型。
1.使用EntityClient
EntityClient 是新的.NET 数据提供程序,EntityClient使用基于文本的语言Entity SQL与概念模型通信。
EntityClient 中的类与常见的 ADO.NET 提供程序中的类相似。例如,使用 EntityCommand 对象执行 EntityClient 查询,这需要 EntityConnection 对象连接到 EDM。当 EntityClient 与 EDM 中的实体交互时,EntityClient 不返回实体的实例而返回 DbDataReader 对象中的所有结果。EntityClient 可以返回一组标准行和列,也可以通过 DbDataReader 返回更复杂的分层数据的表示形式。
示例代码:
            string customerID = txtCustomerID.Text.Trim();
            // Contains a reference to an Entity Data Model (EDM) and a data source connection.
            using (EntityConnection cn = new EntityConnection("Name=NorthwindEntities"))
            {
                cn.Open();
                EntityCommand cmd = cn.CreateCommand();
                cmd.CommandText =
                     "SELECT VALUE c FROM NorthwindEntities.Customers "+
                     "AS c WHERE c.CustomerID = @customerID";
                cmd.Parameters.AddWithValue("customerID", customerID);
                DbDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
                while (rdr.Read())
                    Console.WriteLine(rdr["CompanyName"].ToString());
                rdr.Close();
            }
 
示例使用 EntityClient 连接到概念模型并检索特定的客户。EntityConnection 可以接受概念层的完整连接字符串或 App.Config 文件中连接字符串的名称。连接字符串包含元数据文件(CSDL、MSL 和 SSDL 文件)列表,以及存储的专用于数据库的连接字符串信息。
 
如下是示例程序使用的数据库连接串:
 <connectionStrings>
    <add name="NorthwindEntities" connectionString=" metadata= res://NorthwindEDM/NorthwindModel.csdl|res://NorthwindEDM/NorthwindModel.ssdl|res://NorthwindEDM/NorthwindModel.msl; provider=System.Data.SqlClient;provider connection string=&quot; Data Source=localhost; Initial Catalog=Northwind;Integrated Security=True; MultipleActiveResultSets=True&quot;"providerName="System.Data.EntityClient" />
 </connectionStrings>
 
 
2.使用对象服务Object Services
与由 EDM 表示的数据进行交互的另一种方法是使用对象服务Object Services,对象服务允许直接返回对象列表。
 
下面的示例演示了如何使用对象服务和实体 SQL 进行查询以检索 Customers 列表:
            NorthwindEntities northwindContext = new NorthwindEntities();
            string customerID = txtCustomerID.Text.Trim();
 
            ObjectQuery<Customers> query = northwindContext.CreateQuery<Customers>(
            "SELECT VALUE c FROM Customers AS c WHERE c.CustomerID = @customerID",
             new ObjectParameter("customerID", customerID));
 
            foreach (Customers c in query)
                Console.WriteLine(c.CustomerID + "---" + c.CompanyName);
 
在 EDM 中,EntityContainer 由从 ObjectContext(在本示例中为 northwindContext)继承的类表示。ObjectContext 类实施 ObjectQuery<T> 接口,从而使其可以使用实体 SQL 或 LINQ 创建查询。
CreateQuery 方法接受参数化的实体 SQL 语句,该语句定义了将检索 Customers 实体列表的查询。通过使用 foreach 语句对 ObjectQuery<Customers> 进行迭代时将执行作用于数据库的实际 SQL 语句。
 
 
3. 使用 LINQ to Entities
上述实体SQL脚本可以通过如下的LINQ to Entities 脚本实现,代码如下:
 
            NorthwindEntities northwindContext = new NorthwindEntities();
            string customerID = txtCustomerID.Text.Trim();
 
            var query = from c in northwindContext.Customers
            where c.CustomerID == customerID
            select c;
 
            foreach (Customers c in query)
                Console.WriteLine(c.CustomerID + "---" + c.CompanyName);
 
本示例程序演示界面如下:
 

 
使用实体框架Entity Framework,开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据。一旦完成 EDM 的设计并将其映射到关系存储后,就可以使用 EntityClient、ObjectServices 和 LINQ 等多种技术与对象交互。
 
 
如有问题或疑问,欢迎到http://forum.entlib.com 技术论坛进行交流。
 
下载示例代码和项目。
 
 




附件
EntityFrameworkDemo_Part2.rar 176 KB, 下载 808 次.



http://forum.entlib.com -- 免费、开源、ASP.NET 论坛。
EntLib.com 授权广告商
发表时间 : Sunday, August 24, 2008 2:12:17 PM - 【AD】

以上是EntLib.com的授权广告内容,如果您不感兴趣,请忽略。谢谢!
thurston
发表时间 : Sunday, August 24, 2008 6:14:43 PM - 【2 楼】
等级: 初级会员
组: 注册会员组

注册时间: 8/24/2008
帖子数量: 3
发帖积分: 9
Thanks~  现在可以了, 真的是没有设主键的问题,设了后重新做一切正常。
thurston
发表时间 : Sunday, August 24, 2008 6:16:09 PM - 【3 楼】
等级: 初级会员
组: 注册会员组

注册时间: 8/24/2008
帖子数量: 3
发帖积分: 9
回错帖子.......晕倒 抱歉抱歉
lindping
发表时间 : Friday, October 31, 2008 10:45:39 AM - 【4 楼】
等级: 初级会员
组: 注册会员组

注册时间: 10/31/2008
帖子数量: 2
发帖积分: 6
这个 EntityClient  和ado.net有啥区别啊?没看出来
lindping
发表时间 : Friday, October 31, 2008 10:46:48 AM - 【5 楼】
等级: 初级会员
组: 注册会员组

注册时间: 10/31/2008
帖子数量: 2
发帖积分: 6
这个 EntityClient  和ado.net有啥区别啊?没看出来
entlibforum
发表时间 : Friday, October 31, 2008 1:15:14 PM - 【6 楼】
entlibforum

等级: 管理员级别
组: 管理员组 , 注册会员组

注册时间: 8/17/2008
帖子数量: 190
发帖积分: 563
所在地: EntLib.com 开源论坛小组
To lindping,

EntityClient 是对EDM 的访问;而ado.net 是直接对数据库DB 的访问。

EntityClient 与 ado.net 的code语法比较相似,这应该是让熟悉ado.net的程序员更容易掌握 EntityClient。


http://forum.entlib.com -- 免费、开源、ASP.NET 论坛。
ba527
发表时间 : Thursday, March 19, 2009 3:24:21 PM - 【7 楼】
等级: 初级会员
组: 注册会员组

注册时间: 3/19/2009
帖子数量: 1
发帖积分: 3

不能下载。

entlibforum
发表时间 : Thursday, March 19, 2009 8:38:01 PM - 【8 楼】
entlibforum

等级: 管理员级别
组: 管理员组 , 注册会员组

注册时间: 8/17/2008
帖子数量: 190
发帖积分: 563
所在地: EntLib.com 开源论坛小组
ba527 写道:

不能下载。



可以下载,不要使用其他下载器,如迅雷、FlashGet 等等。


http://forum.entlib.com -- 免费、开源、ASP.NET 论坛。
EntLib.com 专业电子商务系统
浏览本话题的用户
Guest


论坛跳转
不可以 发表新话题.
不可以 回复话题.
不可以 删除自己的发言.
不可以 编辑自己的发言.
不可以 发表投票.
不可以 投票.
主论坛 RSS : RSS  页面生成时间: 0.119 秒. Powered by: EntLib.com 论坛
关于我们 | 联系方式 | 商务合作 | 友情链接
Copyright(C) 2007-2009 EntLib.com(上海闵行区浦江镇863软件孵化基地) - 最专业的中文电子商务系统
基于Microsoft .Net Framework / ASP.Net / C# / AJAX 平台构建的标准电子商务系统
All Rights Reserved (R)
沪ICP备08014628号