标签:framework
在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();
这样就创建了一个客户信息
下面就是客户购物的定单了
这种没有显示外键的关联是无法单表添加,只能实现关联表添加(或许是我认识浅薄,希望大师指点)
这种方式即可实现单表添加,也可实现关联表同时添加。
实例代码
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的实体映射方面上手是很容易的
标签:framework
原文地址:http://blog.csdn.net/han_yankun2009/article/details/41926533