首页 > 代码库 > EF-实体对象建立Dome
EF-实体对象建立Dome
?EF定义:
EF是ADO.NET Entity Framework,是一种对象关系对象。
?EF用处:
EF可以通过已应用程序为中心的概念性模式来工作。
不再对特定的数据引擎或存储架构具有依赖。
可以在不更改代码的情况下更改概念性模型与特定于存储的架构之间的映射。
映射到各种存储架构。
?个人认为:EF建立了实体对象,这些实体对象实现了.net FrameWork 下的一些底层的接口,形成了功能很强大的操纵数据。
?EF应用:
?EF创建:
我们一般说EF创建有三种情况:DBFirst、EntityFirst、CodeFirst。
DBFirst就是我们首先建立数据库,然后连接数据库建立实体对象。
EntityFirst就是我们首先设计实体,然后可以通过实体建立数据库中的表结构,同时建立实体对象。
CodeFirst就是首先写代码,从代码中生成实体对象。
我只用过前两种,第三种没有用过。
现在正在做的这个考评系统,是从EntityFirst创建出来的。我们首先画了实体,这样生成sql脚本,就可以生成数据库了。
这里我就只介绍EntityFirst创建的实体对象映射。
(1)分析实体及实体关系:
这里有User(UID、userName、password、RoleID)和 Role(RoleID、RoleName)
一个用户只能有一种角色,一个角色可以对应多个用户。
这样我们就设计出了实体:
在“添加新项”--“数据”--“ADO.NET实体数据模型”中添加到项目中。
添加后,选择“空模型”--“完成”。
右击空白的地方,单击“新增”--“实体”。
我们设计出来的实体是这样的:
那么我们怎么生成数据库呢?
我们右击空白处:
选择“根据模型生成数据库”就行了,生成了一个sql的脚本文件,我们将这个文件copy下来,在SQL的“新建查询”(查询引擎)中复制下来,执行就ok了。
我们可以看到这个模型帮我们生成的T4模板:
这里我们可以看到有一个Content文件,这个文件相当强大,里面定义了所有的模板和实体模型的映射关系和规范,以及实现那些接口。
我们看一下生成的实体模型:
Role代码:
//------------------------------------------------------------------------------ // <auto-generated> // 此代码已从模板生成。 // // 手动更改此文件可能导致应用程序出现意外的行为。 // 如果重新生成代码,将覆盖对此文件的手动更改。 // </auto-generated> //------------------------------------------------------------------------------ namespace EFDome3 { using System; using System.Collections.Generic; public partial class Role { public Role() { this.User = new HashSet<User>(); } public int RoleID { get; set; } public string RoleName { get; set; } public virtual ICollection<User> User { get; set; } } }
User代码:
<span style="font-size:18px;">//------------------------------------------------------------------------------ //<auto-generated> // 此代码已从模板生成。 // // 手动更改此文件可能导致应用程序出现意外的行为。 // 如果重新生成代码,将覆盖对此文件的手动更改。 //</auto-generated> //------------------------------------------------------------------------------ namespace EFDome3 { using System; using System.Collections.Generic; public partial class User { public string UserName { get; set; } public string UserPasword { get; set; } public int RoleID { get; set; } public virtual Role Role { get; set; } } }</span>
Ok了,我们分析这两个生成的实体,这个很重要。
我们从代码中就可以看出来他们之间不同的地方,出了我们自己定义的字段,我们看到User表中有一个: public virtual Role Role { get; set; },说明了需求分析中一个User只能拥有一个角色。Role表中有一句代码:publicvirtual ICollection<User> User { get; set; },这句话的意思就是一个角色适用于多个用户。
EF的实体我们就建立起来了。
?总结:
EF实体并不是相当成熟,只是一个半成品而已,EF映射了实体对象模型,同时能为我们声称每个实体对象的增删改查等各种方法就好了。EF只支持表、视图、存储过程,但是其他的对象不支持,EF只对SQL Server提供这种设计,其他的数据库就没有那么Lucy。
EF-实体对象建立Dome