精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。”需要全文内容也请联系孙老师。
此示例演示在有层次架构的ASP.NET应用中如何使用实体框架。这对小而快的应用非常有用。代码使用select、 update、 create 和 delete功能。与本例子可以和存储过程配套使用,也可以不配套。此示例面向EF新人。
触动我实现ASP.NET的实体框架概念,想法虽小,但我直面困难,解决了不少问题才得到本文的结果。首先处理的context是复杂的,它在内存中创建一些对象,另一方面,我不得不把要处理的对象发送下。不需要存储实体框架是一个关键,否则错误就层出不穷了。
首先查看数据库的结构。这个例子使用两个表,即Customers 和Category 。Customers 和Category有关系。
该项目有三个层次的结构。业务层包含项目实体,该项目的组件,另外还有数据层和表示层。
业务层包含两个项目,项目一是Solution.Bussines.Entities。它包含相同的表结构和,它也是数据库结构的映射。
该模型和ADO.NET实体数据模型具有相同的数据库结构。
customer 表和存储过程有关系。
注意到面向delCustomer的关系,这一点很重要,你只需要ID来实现删除,但引用表是实体框架需要的。
下一个Customers 类扩展了ADO.NET实体数据模型生成的模型,ADO.NET实体数据模型使用CategoryReference来加载Customer 的Category,加载代码如下:
this.CategoryReference.Load();这种形式很容易获得一个引用另一个类的类,也可以显示在网格中使用。
public partial class Customers public const string EntitySetName = "Customers"; [Browsable(false)] public string CategoryName { get { string res = ""; if (this.Category != null) { res = this.Category.Name; } else if (this.CategoryReference != null) { this.CategoryReference.Load(); if (this.Category != null) { res = this.Category.Name; } } return res; } set { this.CategoryReference.EntityKey = new EntityKey("CustomersEntities.Category", "CategoryId", value); } }在接下来的代码片段扩展了类实体或最好用context来调用类,让类有一个单例模式,且能解决创建多实例情况下不能完全关闭的问题,这些问题在使用using或dispose时会出现。
public static CustomersEntities Context { get { string objectContextKey = HttpContext.Current.GetHashCode().ToString("x"); if (!HttpContext.Current.Items.Contains(objectContextKey)) { HttpContext.Current.Items.Add(objectContextKey, new CustomersEntities()); } return HttpContext.Current.Items[objectContextKey] as CustomersEntities; } }
Solution.Bussines.Components层管理的业务逻辑和连接数据层到实体层。
这层由类CustomersComponent.cs组成,这个文件里调用数据层。在这里你可以添加更多的业务逻辑代码。