文章教程

10.6ADO.NETEntityFramework的新增功能

8/31/2020 9:56:04 PM 人评论 次浏览

图片 1 知识点讲解:光盘:视频\PPT讲解(知识点)\第10章\ADO.NET Entity Framework 4.5的新增功能.mp4

在ASP.NET 4.5中,ADO.NET Entity Framework 4.5的新增功能如下。

(1)对外键的支持,即把外键当做实体的一个属性来处理。

(2)对复杂类型的支持,即实体属性可以是一个复杂类型。

(3)既可以将多个表映射到一个概念实体,还可以将一个表拆为多个概念实体。

(4)增强了LINQ to Entities功能。

(5)新增了对POCO(Plain Old CLR Object)的支持,即Model代码中不会有任何关于持久化的代码。

实例057 演示对外键的支持

源码路径 光盘\daima\10\DataAccess\EntityFramework\  视频路径 光盘\视频\实例\第10章\057

实例文件Demo.aspx.cs的主要实现代码如下。

namespace DataAccess.EntityFramework.ForeignKeys
{
  public partial class Demo : System.Web.UI.Page
  {
    private Random _random = new Random();
    protected void Page_Load(object sender, EventArgs e)
    {
      // 在一个已存在的产品类别下新建一个产品(通过外键值)
      using (var ctx = new ForeignKeysEntities())
      {
        Product p = new Product
        {
          Name = "webabcd test" + _random.Next().ToString(),
          ProductNumber = _random.Next().ToString(),
          StandardCost = 1,
          ListPrice = 1,
          SellStartDate = DateTime.Now,
          rowguid = Guid.NewGuid(),
          ModifiedDate = DateTime.Now,
          ProductCategoryID = 18
        };
        // 这里需要手工 Add 这个新的 Product,然后再调用 SaveChanges()
        ctx.Products.AddObject(p);
        Response.Write(ctx.SaveChanges());
      }
      Response.Write("<br /><br />");
      // 在一个已存在的产品类别下新建一个产品(通过外键对象)
      using (var ctx = new ForeignKeysEntities())
      {
        Product p = new Product
        {
          Name = "webabcd test" + _random.Next().ToString(),
          ProductNumber = _random.Next().ToString(),
          StandardCost = 1,
          ListPrice = 1,
          SellStartDate = DateTime.Now,
          rowguid = Guid.NewGuid(),
          ModifiedDate = DateTime.Now,
          ProductCategory = ctx.ProductCategories.Single(c => c.ProductCategoryID == 18)
        };
// 这里直接调用 SaveChanges() 即可,而不用再手工地 Add 这个新的 Product
// 因为与这个新的 Product 关联的那个已存在的 ProductCategory 会自动地 Add 这个新的 Product
Response.Write(ctx.SaveChanges());
      }
    }
  }
}
范例113:实现复杂的搜索
源码路径:光盘\演练范例\113视频路径:光盘\演练范例\113范例114:普通登录
源码路径:光盘\演练范例\114视频路径:光盘\演练范例\114\

ADO.NET Entity Framework 4.5对存储过程的支持有了明显的增强,主要表现为可以将存储过程的返回值映射到一个自定义的复杂类型上。当然,这个复杂类型也可以根据存储过程的返回值自动生成。

实例058 演示对复杂类型的支持

源码路径 光盘\daima\10\DataAccess\EntityFramework\  视频路径 光盘\视频\实例\第10章\058

本实例的具体实现过程如下。

(1)在EDM设计器中的实体上,单击鼠标右键,在弹出的快捷菜单中选择“Add”命令,可以新建一个复杂类型。

(2)在EDM设计器中的实体上,选中多个属性后单击鼠标右键,在弹出的快捷菜单中选择 “Refactor into New Complex Type”命令,可以合并多个属性为一个复杂类型;

(3)在EDM设计器中的“Mapping Details”窗口或“Model Broswer”窗口中,可以对复杂类型进行编辑。

编写实现文件Demo.aspx.cs,其主要代码如下。

namespace DataAccess.EntityFramework.ComplexType
{
  public partial class Demo : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      using (var ctx = new ComplexTypeEntities())
      {
        // 这里的 Name 类型是自定义的一个复杂类型
//(其有3个属性,分别为 FirstName、 MiddleName和LastName),详见EDM
        Name name = ctx.Customers.First().Name;
        Response.Write(string.Format("FirstName: {0}<br />MiddleName: {1}<br />LastName: {2}", name.FirstName, 
        name.MiddleName, name.LastName));
      }
      Response.Write("<br /><br />");
      using (var ctx = new ComplexTypeEntities())
      {
        // 此处的MyCustomer 类型是存储过程 uspSelectCustomer
        // 其概念模型为:GetCustomer()的返回值的映射类型
        MyCustomer customer = ctx.GetCustomer().First();
            Response.Write(string.Format("CustomerID: {0}<br />FirstName: {1}<br />MiddleName: {2}<br />LastName: {3}", customer.CustomerID, customer.FirstName, customer.MiddleName, customer.LastName));
      }
    }
  }
}
范例115:单击登录
源码路径:光盘\演练范例\115视频路径:光盘\演练范例\115范例116:MD5加密登录用户密码
源码路径:光盘\演练范例\116视频路径:光盘\演练范例\116\

在上述代码中,诠释了ADO.NET Entity Framework 4.5中对复杂类型的支持,即实体属性可以是一个复杂类型。

教程类别