创建ADO.NET Entity Framework 和 WPF

本示例程序演示使用ADO .NET Entity Framework 创建Entity Data Model,然后如何使用Entity Client、Entity SQL 访问Entity Data Model,如何使用对象服务(Object Service)和LINQ to Entities 访问 Entity Data Model。并结合WPF 客户端,演示查询、更新、插入、删除数据记录等等。范例采用AdventureWorksLT 数据库
  
  示例程序运行界面如下:
  
  范例程序下载(在底部)!
  
  示例代码分析:
  1. 填充Product Category 下拉列表框
  下面的代码采用Entity SQL,通过Entity Client 访问EDM,返回全部Category 实体集合。
  
   public IList<Category> GetCategories()
   {
   IList<Category> result = null;
   EntityDataReader rdr;
   EntityCommand cmd;
   string esqlQuery;
  
   using (EntityConnection conn = new EntityConnection("name=AdventureWorksLTEntities"))
   {
   conn.Open();
  
   esqlQuery = @"SELECT VALUE c FROM AdventureWorksLTEntities.Category AS c";
   result = new List<Category>();
   cmd = conn.CreateCommand();
   cmd.CommandText = esqlQuery;
   rdr = cmd.ExecuteReader(CommandBehavior.Sequential Access);
  
   while (rdr.Read())
   {
   result.Add(this.MaterializeCategory(rdr));
   }
  
   conn.Close();
   }
  
   return result;
   }
  另外需要MaterializeCategory 方法转换EntityDataReader 为Category 实体对象。
   private Category MaterializeCategory(EntityDataReader rdr)
   {
   Category category = Category.CreateCategory(
   rdr.GetInt32(0),
   Convert.ToString(rdr[1]),
   rdr.GetGuid(2),
   DateTime.Now);
  
   return category;
   }
  
  
  下面采用LINQ to Entities 检索全部有ParentCategory的Category 实体。你会注意到,下面的方法不再需要上面的MaterializeCategory方法,对象服务(Object Services)直接从EDM中返回实体对象,代码简化了很多。
  
   var categories = from c in this.context.Category
   where c.ParentCategory.Name != null
   orderby c.Name
   select c;
  
   return categories.ToList();
  
  2. 填充Product Model 下拉列表框
  同样采用LINQ to Entities 查询所有的Model 实体。
   var models = from m in this.context.Model
   orderby m.Name
   select m;
  
   return models.ToList();
  
  3. 使用Entity SQL和对象服务(Object Services)检索产品列表
  因为Entity SQL 是基于文本的查询字符串,这样可以方便动态创建查询语句。下面的示例代码提供了对Product / Category / Model 的查询过滤,可以传入参数 ObjectParameter。首先,调用ObjectContext 类的CreateQuery<T>方法,返回ObjectQuery<T>对象;然后传入创建的3个ObjectPrameters 参数对象实例。
  实际执行查询操作是在我们访问结果集时发生,如调用ToList(), ToArrray() 等等。
   public IList<Product> GetProducts(string productName, Category category, Model model)
   {
   StringBuilder queryString = new StringBuilder("SELECT VALUE prod FROM AdventureWorksLTEntities.Product AS prod ");
   queryString.Append("Where prod.ProductCategory.CategoryID=@CategoryId ");
   queryString.Append(" AND prod.ProductModel.ModelID=@ModelId ");
  
   var productParameter = new ObjectParameter("ProductName", productName);
   var categoryParameter = new ObjectParameter("CategoryId", category.CategoryId);
   var modelParameter = new ObjectParameter("ModelId", model.ModelID);
  
   if (!string.IsNullOrEmpty(productName))
   {
   queryString.Append("AND INDEXOF(@ProductName, prod.Name) > 0 ");
   }
  
   queryString.Append("ORDER BY prod.Name");
  
   var products = this.context.CreateQuery<Product>(queryString.ToString());
   products.Parameters.Add(productParameter);
   products.Parameters.Add(categoryParameter);
   products.Parameters.Add(modelParameter);
  
   return products.ToList();
   }
  
  4. 删除、更新、增加新产品记录
  使用ObjectContext将对Entity Data Model 的更改更新 数据库,与通过EntityClient执行Entity SQL 查询不一样,ObjectContext 方法允许你直接增加新的实体、操作实体或删除实体,并最后保存更新到数据库。
  
  删除产品
  当SaveChanges 方法调用时,对象服务产生并对 数据库执行类似于T-SQL的插入、更新、或删除语句等等。
   public void DeleteProduct(Product product)
   {
   context.DeleteObject(product);
   context.SaveChanges();
   }
  
  更新产品
  UpdateProduct方法是告诉context调用SaveChanges方法,context已经了解每一个对象的状态,知道哪些更改需要传递到 数据库。示例代码如下:
   public void UpdateProduct()
   {
   context.SaveChanges();
   }
  SaveChanges方法对 数据库执行有效的调用,仅仅保存更新的、新增的或删除的对象。针对更新的对象而言,仅更新的字段才会传输到数据库。
  
  新增产品
  ObjectContext的AddObject方法需要传入新增实体对象的Entity Set名称,在下面的示例代码中,Product实体的Entity Set名称也为Product。
  
  刷新产品
  RefreshProduct方法用来更新页面的显示。
   public void RefreshProduct(Product product)
   {
   context.Refresh(RefreshMode.StoreWins, product);
   }
  Context的Refresh方法允许客户端的更新被 数据库对象更新。在调用Refresh方法后,客户端对象的原始值会被数据库值更新,但是当前值可能或不能被数据库值更新,这取决于RefereshMode。StoreWins 模式表示实体集合中的实体对象将被更新与数据库值一致,而ClientWins 表示仅仅客户端的更新才持久化。

转载于:https://www.cnblogs.com/yxbsmx/articles/1488436.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: .NET Framework是Microsoft的一个应用程序框架,它提供了在Windows操作系统上运行的各种应用程序所需的工具和服务。.NET Framework 3.5是.NET Framework的一个版本,它包括了.NET Framework 2.0和3.0两个版本,进一步扩展了其功能和特性。 .NET Framework 2.0是一个主流版本,拥有一系列改进和新增功能,包括更好的安全性,更好的性能和互操作性,更好的控件和类库等。.NET Framework 3.0添加了更多的功能,如Windows Presentation Foundation(WPF),Windows Communication Foundation(WCF)和Windows Workflow Foundation(WWF)等。这些技术都是针对不同领域的应用程序所需的,如网站开发、桌面应用程序、数据库应用程序等。 .NET Framework 3.5进一步增强了.NET Framework的特性,包括了一些新的功能,例如LINQ(Language Integrated Query),ASP.NET AJAX和ADO.NET Entity Framework等。这些功能可以极大地提高应用程序的开发效率和性能,并且可以使开发人员更容易地编写高质量、高效和可扩展的应用程序。 总之,.NET Framework 3.5是一个重要的版本,它整合了.NET Framework 2.0和3.0的特性,并提供了更多的功能和特点。对于需要在Windows操作系统上运行的应用程序来说,.NET Framework 3.5是一个必备的组件。 ### 回答2: .NET Framework 3.5是一个Microsoft开发的软件框架,包括了.NET 2.0和3.0两个版本。它提供了一套标准的库和支持多种语言,能够使开发人员更加容易地创建和管理应用程序。.NET Framework 3.5在开发web应用程序和windows应用程序方面都有很强的功能,能够提升开发效率和程序的运行速度。 在.NET Framework 3.5中,包含了许多新增的功能,如LINQ(Language Integrated Query)和WCF(Windows Communication Foundation),以及对ASP.NET AJAX、ASP.NET Dynamic Data等功能的加强,同时还能够支持Windows Workflow Foundation(WF)。这些功能的加入,使.NET Framework 3.5成为了一个更加强大、更加灵活的平台。 在实际应用中,.NET Framework 3.5能够为开发人员提供很多便利。它提供了许多可重用的类和方法,避免了开发人员重复编写一些基本功能代码的麻烦。同时,它还提供了一些自动化工具,如Visual Studio建议工具、自动完成器等,使开发人员能够更轻松地编写代码。并且,它还能够支持多种编程语言,如C#、VB.NET、F#等,使得开发人员能够选用自己熟悉的语言进行开发。 总的来说,.NET Framework 3.5是一个功能丰富、灵活可靠的开发平台,拥有着众多的优点和特点,能够显著提升开发人员的工作效率和应用程序的质量。 ### 回答3: .NET Framework 3.5 是微软开发的一个开源框架,它包括了.NET 2.0和3.0,并添加了新的特性和功能。这个框架可以让开发者更容易地编写和运行Windows应用程序,同时也提供了许多开发及运行时的支持和工具。 在.NET Framework 3.5中,最重要的特性之一是Linq。它是一种数据查询技术,可以在任何数据源中执行强类型查询,并将结果作为对象来操作。使用Linq,开发者可以在编译时检索错误,大大减少了代码错误并增加了应用程序的性能。 另一个与.NET Framework 3.5相关的特性是WPF(Windows Presentation Foundation),它可以帮助开发者更好地创建交互式的用户界面。WPF使用XAML来定义界面,允许开发者构建更美观和更复杂的UI控件。 除此之外,.NET Framework 3.5还提供了许多重要的特性,例如Windows Communication Foundation(WCF)、Windows Workflow Foundation(WWF)和Windows CardSpace。这些框架可用于构建分布式应用程序、工作流和安全身份验证系统等。 总体来说,.NET Framework 3.5是非常重要的一个框架,可帮助开发者更快速、更容易地构建高质量的Windows应用程序,同时,也为应用程序提供了更强大、更高效的部署机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值