EntityFrameWork实体映射

来源:互联网 发布:域名分发系统 编辑:程序博客网 时间:2024/05/03 23:38

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

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

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

 

关联映射

如已经通过PowerDeesigner画好了实体间的关系 ,实体关系在转成物理模型导入数据库。通过EFmodel模型从数据库导入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 在模型中添加关联



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


优点:

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

实例代码

 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的实体映射方面上手是很容易的

2 0
原创粉丝点击