在上一篇文章中,   我们用 PD15.1 来设计了数据库,并且生成 了sql数据库,现在我们用 vs2013来试试  用 ModeFirst模式来设计数据库,并且生成数据库, 在PD中的表结构如下

一对多的数据怎么用jquery绘制表格 一对多数据表设计_测试

下面我们用 vs2013来设计一下

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_02

创建2个表,并且在空白地方 新增 关联 为 一对多

一对多的数据怎么用jquery绘制表格 一对多数据表设计_EF_03

一对多的数据怎么用jquery绘制表格 一对多数据表设计_EF_04

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_05

我们根据这个模型,来生成数据库看看

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_06

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_07

点击生成后,我们看到 数据库里面表已经生成. 而且还生成了外键.

一对多的数据怎么用jquery绘制表格 一对多数据表设计_一对多_08

 

下面我们来把剩下的几个表来弄完.

先添加  部门表和 用户部门关系表(自己手动创建的中间表) 如下

一对多的数据怎么用jquery绘制表格 一对多数据表设计_一对多_09

然后我们添加关系,  用户 与  用户部门表 是 一对多, 部门和 用户部门表  也是一对多

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_10

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_11

完成如下

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_12

最后我们把 活动表添加进来

一对多的数据怎么用jquery绘制表格 一对多数据表设计_一对多的数据怎么用jquery绘制表格_13

活动表和部门表是  多对多关系,用EF来表现出来

一对多的数据怎么用jquery绘制表格 一对多数据表设计_EF_14

最后如下

一对多的数据怎么用jquery绘制表格 一对多数据表设计_测试_15

现在,我们点击空白地方,根据EF实体模型来生成数据库  (注意,重新生成的sql脚本里面有 drop删除表命令,要小心你之前的数据)

一对多的数据怎么用jquery绘制表格 一对多数据表设计_一对多的数据怎么用jquery绘制表格_16

一对多的数据怎么用jquery绘制表格 一对多数据表设计_一对多_17

我们可以看到,EF会帮我们把  部门和 活动表 的多对多关系,自动的帮我们创建一张中间表.

 

一:添加一对多的关系  userinfo 表 和 order 表

下面我们简单的来在EF中,添加1个用户,两个订单,并且关联他们一对多的关系

下面是正确的代码


static void YiDuiDuo()
        {
            //1.1 创建1个用户(可以使用2种不同的方式,保存到上下文)
            UserInfo userinfo1 = new UserInfo { UserName = "老李1" };

            db.UserInfo.Add(userinfo1);                         //这是第1种方式添加实体到数据库的上下文里面
            //db.Entry(userinfo1).State = EntityState.Added;    //这是第2种方式


            //1.2 创建4个订单(并使用2种不同的方式,保存到上下文)
            Order order1 = new Order { Content = "这是订单1", CreateTime = DateTime.Now };
            Order order2 = new Order { Content = "这是订单2", CreateTime = DateTime.Now };
            Order order3 = new Order { Content = "这是订单3", CreateTime = DateTime.Now };
 
 
            db.Order.Add(order1);                       //第1种方式添加到数据库的上下文
            db.Order.Add(order2);
            db.Order.Add(order3);
            db.Entry(order3).State = EntityState.Added; //第2钟方式添加到数据库的上下文
 
 

            db.SaveChanges();



            //1.3 添加用户1和订单1,2,3的关联
            userinfo1.Order.Add(order1);        //从用户方面,直接添加订单
            order2.UserInfoId = userinfo1.Id;   //从订单方面,根据订单里面的 用户id这个外键,来设置(注意,这里的userinfo1.Id看起来是等于0,实际在运行的时候,会赋值成真正的id值)
            order3.UserInfo = userinfo1;        //从订单方面,根据订单里面的  导航属性,来设置


 


            //1.5 保存上面所有的操作到数据库
            db.SaveChanges();
            Console.WriteLine("保存成功");

        }



注意上面的订单表和用户表关联的3种不同的写法

1:userinfo1.Order.Add(order1);        //从用户方面,直接添加订单 
      2:order2.UserInfoId = userinfo1.Id;   //从订单方面,根据订单里面的 用户id这个外键,来设置(注意,这里的userinfo1.Id看起来是等于0,实际在运行的时候,会赋值成真正的id值) 
     3:order3.UserInfo = userinfo1;        //从订单方面,根据订单里面的  导航属性,来设置

一对多的数据怎么用jquery绘制表格 一对多数据表设计_一对多的数据怎么用jquery绘制表格_18

最后数据库生成的数据为

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_19

特殊情况:

原本我是准备先添加2个用户,6个订单,然后用户1分别和订单1,2,3关联,  用户2和订单4,5,6 关联的时候,总是提示报错

无法确定“Model.UserInfoOrder”关系的主体端。添加的多个实体可能主键相同,具体请看

EF报错 无法确定“XXX”关系的主体端。添加的多个实体可能主键相同

于是,只能先放弃一次添加多个实体主键的关系,采用先添加用户1,关联订单1,2,3这样的方式来添加,就正确了

 

二:添加多对多表的关系(自己手动创建的中间表)

用户表  用户部门关系表  部门表  这3张表的数据的关联

一对多的数据怎么用jquery绘制表格 一对多数据表设计_测试_20

一对多的数据怎么用jquery绘制表格 一对多数据表设计_测试_21



一对多的数据怎么用jquery绘制表格 一对多数据表设计_测试_22一对多的数据怎么用jquery绘制表格 一对多数据表设计_一对多_23

代码如下//1.1 创建1个用户(可以使用2种不同的方式,保存到上下文)
            UserInfo userinfo1 = new UserInfo { UserName = "李大叔" };

            db.UserInfo.Add(userinfo1);                         //这是第1种方式添加实体到数据库的上下文里面
            //db.Entry(userinfo1).State = EntityState.Added;    //这是第2种方式

            //1.2 创建2个部门
            Department dep1 = new Department { DepName = "开发部" };
            Department dep2 = new Department { DepName = "人力资源部" };
            

            db.Department.Add(dep1);                       //第1种方式添加到数据库的上下文
            db.Entry(dep2).State = EntityState.Added;    //第2钟方式添加到数据库的上下文

            db.SaveChanges();   //这里提前保存部门1和部门2,是为了防止报错      无法确定“XXX”关系的主体端。添加的多个实体可能主键相同

            //1.3 把用户1,添加到 部门1  通过中间表里面  外键属性,来关联这3个表
            R_UserInfo_Dep userinfo_dep1 = new R_UserInfo_Dep
            {
                Jointime = DateTime.Now,
                UserInfoId=userinfo1.Id,
                DepartmentId=dep1.Id
            };
            //1.4 再把用户1,添加到部门2, 通过中间表里面的  导航属性,来关联这3个表
            R_UserInfo_Dep userinfo_dep2 = new R_UserInfo_Dep
            {
                Jointime = DateTime.Now,
                UserInfo = userinfo1,
                Department = dep2
            };

            db.R_UserInfo_Dep.Add(userinfo_dep1);               //第一种添加到上下文的方式
            db.Entry(userinfo_dep2).State = EntityState.Added;  //第二种添加到上下文的方式
            //1.5 保存上面所有的操作到数据库
            db.SaveChanges();
            Console.WriteLine("保存成功");



 

数据库查询结果

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_24

三:添加多对多表的关系 (系统自动生成的表)

这次我们直接用上一步添加的2个部门表,就不新增部门表了,但是我们新增2个活动,然后2个部门都参加这2个活动,我们要在代码里面完成他们的关系

 

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_25

一对多的数据怎么用jquery绘制表格 一对多数据表设计_EF_26



一对多的数据怎么用jquery绘制表格 一对多数据表设计_测试_22一对多的数据怎么用jquery绘制表格 一对多数据表设计_一对多_23

完整代码如下 //1.1 创建2个活动(可以使用2种不同的方式,保存到上下文)
            Play play1 = new Play { PlayTime = Convert.ToDateTime("2013-07-05"), PlayContent = "公司聚会活动" };
            Play play2 = new Play { PlayTime = Convert.ToDateTime("2013-06-18"), PlayContent = "京东狂欢节" };
            db.Play.Add(play1);
            db.Entry(play2).State = EntityState.Added;


            //1.2 从数据库里面查询出现在的2个部门,这2个部门,都参加上面是2个活动

            var query = db.Department;  //这里我们先看看查询条件最后会变成什么
            var deps = query.ToList();
            foreach (var item in deps) 
            {
                play1.Department.Add(item);
                play2.Department.Add(item); 
            }

            //1.3 保存上面所有的操作到数据库
            db.SaveChanges();
            Console.WriteLine("保存成功");



 

最后数据库的查询结果是

一对多的数据怎么用jquery绘制表格 一对多数据表设计_数据库_29

 

ok 那么这节到此为止