EntityFrameWork实体映射

在ORM的实体框架中多为继承,关联等

在Hibernater中关联的实体,需要配置 xml文件来维护不同实体的关系

而在EF中这这是通过可视化的图形操作来控制之间的关系的:如下图

关联映射

如已经通过PowerDeesigner画好了实体间的关系
,实体关系在转成物理模型导入数据库。通过EF的model模型从数据库导入图2

选择好数据库,选择好实体框架,注意这里的框架是和Framework对应的

重点来了

我们看到 有(在模型中包括外键列)若选择该列,这就会在有关联关系的实体中添加外键列。则在添加实体时就要手动添加维护该值,首先我选择的是不包括。我们看具体的关系

不显示外键关联

那么我们如何编码呢

首先我们创建一个客户类

TestEFEntities db = new TestEFEntities();

            Customers cus = new Customers
            {
                  CusName="hanhanxml",
                  CusterId = Guid.NewGuid().ToString()// a0818e4d-9ccd-48ea-b70a-88a78bf3113c
            };
	 db.Customers.Add(cus);
	  db.SaveChanges();

这样就创建了一个客户信息

下面就是客户购物的定单了

缺点:

这种没有显示外键的关联是无法单表添加,只能实现关联表添加(或许是我认识浅薄,希望大师指点)

外键关联

在关联表中显示外键属性

方式1 在模型中添加关联

添加方式2 数据库中有关系,直接从数据库中导入

优点:

这种方式即可实现单表添加,也可实现关联表同时添加。

实例代码

 TestEFEntities db = new TestEFEntities();
            Customers cus = new Customers
            {
                CusName = "hanhan",
                CusterId = Guid.NewGuid().ToString()//678d0b30-321a-4c72-9ec3-1f8c7f3c254b
            };

            OrderInfoes order = new OrderInfoes//单向在订单表中添加数据
            {
                 content="Hanhan",
                 OrderId=Guid.NewGuid().ToString(),
                 OrderName="hanhamxml",
                 CustomersCusterId=cus.CusterId,//查询关联属性外键值
            };
            OrderInfoes order2 = new OrderInfoes//同时插入两个表 ,定单和客户表(客户表中插入了客户数据)
            {
                content = "Hanhan",
                OrderId = Guid.NewGuid().ToString(),
                OrderName = "hanhamxml",
                Customers = cus
            };
           // db.Customers.Add(cus);
            db.OrderInfoes.Add(order);
            db.SaveChanges();

继承映射

在EF模型中继承用的是一对一的映射,而到了数据库则是每个子类一张表,存放子类所特有的属性实例图

优缺点:

这种设计方式完全符合关系模型的设计原则,且不存在冗余,维护起来比较方便,对每个类的修改只需要修改其所对应的表,灵活性很好,完全是参照对象继承的方式进行配置,对于父类的查询需要使用左外链接,对于子类查询需要使用内链接,对于子类的持久话至少要处理两个表

模型图

数据库关系图

两个表通过唯一主键进行关联,这样就是同时插入两个表数据了

代码

 TestEFEntities db = new TestEFEntities();
            Customers cus = new Customers
            {
                 CusName="hanhan3",
                 CusterId=Guid.NewGuid().ToString()
            };

            OrderInfoes order = new OrderInfoes
            {
                 content="hanhan2",
                 CusterId = cus.CusterId,
                 CusName = cus.CusName,
                 OrderId=Guid.NewGuid().ToString(),
                 OrderName="hanhan5"

            };

            db.OrderInfoes.Add(order);//同时添加俩表
            db.SaveChanges();

            var orders=db.OrderInfoes.AsQueryable();//查询子类所有数据
            foreach (var item in orders)
            {
                Console.WriteLine(item.CusName);//查询数据,父类的名称
            }

小结:

通过以上两点我们看到,实体映射框架几乎是大同小异,若你了解Hibernate,那么对于EF的实体映射方面上手是很容易的

时间: 2024-08-01 17:16:25

EntityFrameWork实体映射的相关文章

.NET - EntityFramework 实体关系数据模型

EntityFramework 实体关系数据模型(DO.NET Entity Framework) ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.该框架曾经为.NET Framework的一部分,但version 6之后从.NET Framework分离出来. 在项目中使用Entity Framework 要得到最高版本的Entity Framework 程序包,可以通过扩展与更新或者右击项目-引

EF6.0+APS.NET MVC5.0项目初探三(code first实体映射到数据库)

到这里架构就搭建完了,该向里面填充东西的时候了,如上篇:EF6.0+APS.NET MVC5.0项目初探二(类库引用关系及说明) 第一步 :在需要添加EF的类库Domain.DbContext上右击->管理NuGet程序包->找到Entity FrameWork下载安装. 如图: 第二步:新建DbContext 第三步:在类库Domain.Entity上添加引用System.ComponentModel.DataAnnotations(用于验证的引用) 并新建实体类. 1 using Syst

EF Code First:实体映射,数据迁移,重构(1)

一.前言 经过EF的<第一篇>,我们已经把数据访问层基本搭建起来了,但并没有涉及实体关系.实体关系对于一个数据库系统来说至关重要,而且EF的各个实体之间的联系,实体之间的协作,联合查询等也都依赖于这些实体关系. 二.实体映射 实体与数据库的映射可以通过DataAnnotation与FluentAPI两种方式来进行映射: (一) DataAnnotation DataAnnotation 特性由.NET 3.5中引进,给.NET中的类提供了一种添加验证的方式.DataAnnotation由命名空

hibernate的实体映射(一对一)

Hibernate的实体映射的主要任务就是实现数据库关系表与持久化类之间的映射,其关系如图: 双向映射一对一关联关系,通过唯一外键方式进行一对一关联映射,就是一个表的外键和另一个表的唯一主键对应形成一对一映射关系. 例如,以下例子,社团与社团负责人(社长),两者之间是一对一的关联关系: 持久化类association.java: public class Association implements java.io.Serializable{     private Integer id;   

使用Fluent API进行实体映射【Code-First系列】

现在,我们来学习怎么使用Fluent API来配置实体. 一.配置默认的数据表Schema Student实体 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EF4 { public class Student { public int StudentID { get; set; } publ

Hibernate(三)结构-配置文件-实体映射及配置文件

一.体系结构 SessionFactory:属于单一数据库的编译过的映射文件的一个线程安全的,不可变的缓存快照.Session的工厂.有可能持有一个可选的数据缓存可以进程级别或者群级别保存可以在事务中重用数据. 会话,Session:单线程,生命期短促的对象,代表应用程序和持久化层之间的一次对话.封装了一个JDDBC连接,它也是Transaction的工厂,保存有必须持久化对象的缓存,用于遍历对象,或者通过标识符查找对象. 持久化对象(Persistent Object)及其集合(Collect

Hibernate实体映射技巧总结

初学者有没有感觉在写Hibernate实习映射的时候,被各种的many-to-one set one-to-many搞乱了头脑呢? 下面只需要三部,轻轻松松搞定. 1,写注释 格式为:(1?)属性,是本类与(2?)的(3?)关系. <span style="font-size:14px;">例如: <!-- users属性,本类与User的一对多 --> <!-- parent属性,本类与Department的多对一 --> <!-- role

Hibernate实体映射文件多对多等关系简单应用技巧

第一步,写注释: <!--xx属性,本类与Yy(类)的多对一 --> <!--xx属性,本类与Yy(类)的一对多 --> <!--xx属性,本类与Yy(类)的多对多 --> <!--xx属性,本类与Yy(类)的一对一 --> 第二部,拷模版 <!--xx属性,本类与Yy(类)的多对一 --> <many-to-one name="" class="" column="">&l

开源实体映射框架EmitMapper介绍

开源实体映射框架EmitMapper介绍 综述 EmitMapper是一个开源实体映射框架,地址:http://emitmapper.codeplex.com/. EmitMapper映射效率比较高,接近硬编码.EmitMapper采用emit方式在运行时动态生成IL,而其他映射框架多是采用反射机制.此外EmitMapper最大限度地减少了拆箱装箱操作和映射过程中的额外的调用. EmitMapper支持.net的所有平台:Framework 3.5.Microsoft Silverlight 3