首页 > 代码库 > EntityFrameWork实体映射

EntityFrameWork实体映射

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

EntityFrameWork实体映射