EF初级入门 (一对多、多对多)

1、创建新项目并引入Entity Framework

然后就可以开始使用EF了

开始使用一对多

Users 用户类,UserDetail用户详情类:一个用户对应多个详情(仅用于测试)

 1 public class UserDetail
 2     {
 3         public int DetailId { get; set; }
 4         public string NAME { get; set; }
 5         public int uid { get; set; }
 6         public string remark { get; set; }
 7         public virtual Users user { get; set; }
 8     }
 9     public class Users
10     {
11         public int id { get; set; }
12         public string Name { get; set; }
13         public int Age { get; set; }
14         public DateTime Birth { get; set; }
15         public virtual ICollection<UserDetail> detail { get; set; }
16
17     }

ObjectContext类:

 1 public class ObjectContext : DbContext
 2     {
 3         public ObjectContext()
 4             : base("server=.;uid=xx;pwd=xxx;database=XXX")
 5         {
 6
 7         }
 8         protected override void OnModelCreating(DbModelBuilder modelBuilder)
 9         {
10             base.OnModelCreating(modelBuilder);
11             modelBuilder.Entity<Users>().HasKey(p => p.id);
12             modelBuilder.Entity<UserDetail>().ToTable("UserDetail");
13             modelBuilder.Entity<UserDetail>().HasKey(p => p.DetailId);
14             modelBuilder.Entity<UserDetail>().Property(p => p.NAME).HasColumnName("NAME");
15             modelBuilder.Entity<UserDetail>().HasRequired(p => p.user).WithMany(p => p.detail).HasForeignKey(p => p.uid);
16         }
17         public DbSet<Users> users { get; set; }
18         public DbSet<UserDetail> userdetail { get; set; }
19
20     }

查询方法:

 1 public void GetAll()
 2         {
 3             using (ObjectContext db = new ObjectContext())
 4             {
 5                 var users = (from a in db.users select a).ToList<Users>();
 6                 for (int i = 0; i < users.Count; i++)
 7                 {
 8                     Console.WriteLine("ID:"+users[i].id+",Name:"+users[i].Name);
 9                     foreach (var item in users[i].detail)
10                     {
11                         Console.WriteLine("  id:" + item.DetailId + ",NAME" + item.NAME);
12                     }
13                 }
14             }
15         }

删除和修改子集同时进行方法

 1 public void Update()
 2 {
 3 using (ObjectContext db = new ObjectContext())
 4             {
 5                 var users = (from a in db.users where a.id == 1 select a).First();
 6                 //删除子集
 7                 var detailitem=users.detail.Where(p=>p.DetailId==7).FirstOrDefault();
 8                 db.Entry(detailitem).State = System.Data.Entity.EntityState.Deleted;
 9                 users.detail.Remove(detailitem);
10                 //修改子集
11                 var detailitem2 = users.detail.Where(p=>p.DetailId==2).FirstOrDefault();
12                 detailitem2.NAME = "这是修改后的数据";
13                 db.Entry(detailitem2).State = System.Data.Entity.EntityState.Modified;
14                 db.SaveChanges();
15             }
16 }

然后是对多对

新增一个角色类 Roles

 1 public class Roles
 2     {
 3         public Roles()
 4         {
 5             users = new HashSet<Users>();
 6         }
 7         public int RoleID { get; set; }
 8         public string RoleName { get; set; }
 9         public string Remark { get; set; }
10         public virtual ICollection<Users> users { get; set; }
11     }

修改ObjectContext类:

1 modelBuilder.Entity<Roles>().HasKey(p => p.RoleID);
2             //modelBuilder.Entity<UserRoles>().HasKey(p => p.ID);
3             modelBuilder.Entity<Roles>().HasMany(p => p.users).WithMany(p => p.roles).Map(
4                 p =>
5                 {
6                     p.MapLeftKey("RoleId");
7                     p.MapRightKey("UserId");
8                     p.ToTable("UserRoles");
9                 });

写测试方法:

 1 public static void AddUserRole()
 2         {
 3             using (ObjectContext db = new ObjectContext())
 4             {
 5                 //添加一个用户 两个角色
 6                 var user = new Users() { Name = "Test用户1", Age = 20, Birth = DateTime.Now };
 7                 var role1 = new Roles() { RoleName = "Test角色1" };
 8                 var role2 = new Roles() { RoleName = "Test角色2" };
 9                 user.roles.Add(role1);
10                 user.roles.Add(role2);
11                 db.users.Add(user);
12                 db.SaveChanges();
13             }
14         }

查询:

 1 public static void GetAllUserRoles()
 2         {
 3             using (ObjectContext db = new ObjectContext())
 4             {
 5                 var users = (from a in db.users select a).ToList<Users>();
 6                 if (users != null)
 7                 {
 8                     Console.WriteLine("User查询结果:");
 9                     foreach (var item in users)
10                     {
11                         Console.WriteLine("UserID:" + item.id + ",UserName:" + item.Name + ",Birth:" + item.Birth);
12                         if (item.roles != null)
13                         {
14                             foreach (var role in item.roles)
15                             {
16                                 Console.WriteLine("  RoleId:" + role.RoleID + ",RoleNmae:" + role.RoleName + ",UserId:" + item.id);
17                             }
18                         }
19                     }
20                 }
21                 var roles = (from a in db.roles select a).ToList<Roles>();
22                 if (roles != null)
23                 {
24                     Console.WriteLine("Role查询结果:");
25                     foreach (var item in roles)
26                     {
27                         Console.WriteLine("RoleID:" + item.RoleID + ",RoleName:" + item.RoleName);
28                         if (item.users != null)
29                         {
30                             foreach (var user in item.users)
31                             {
32                                 Console.WriteLine("  UserID:" + user.id + ",UserName:" + user.Name + ",Birth:" + user.Birth + ",RoleID:" + item.RoleID);
33                             }
34                         }
35                     }
36                 }
37             }
38         }

然后写完测试。。。

源代码:EFDemo

时间: 2024-12-24 17:34:01

EF初级入门 (一对多、多对多)的相关文章

hibernate 一对多|多对一

一对多:(一个客户对应多个联系人) 客户实体:Customer.java package cn.future.domain; import java.util.HashSet; import java.util.Set; public class Customer { /* * CREATE TABLE `cst_customer` ( `cust_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', `cust_name` VAR

框架 day32 Hibernate,一级缓存,关联关系映射(一对多,多对多)

一级缓存 概念 *在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java集合构成了Session缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期 *当session的save()方法持久化一个对象时,该对象被载入缓存, 以后即使程序中不再引用该对象,只要缓存不清空,该对象仍然处于生命周期中. 当试图get(). load()对象时,会判断缓存中是否存在该对象,有则返回,此时不查询数据库.没有再查询数据库 *Session 能够在

Asp组件初级入门与精通系列之七

在运行前几章的例子,可能或多或少的都会碰上一些问题 如:组件编译后,又要修改,发生"权限被拒绝,'f:\csdn\fcom.dll'"等等的错误. 当asp页面浏览时,打开任务管理器,会看到一个dllhost.exe,用户名为IWAM_YANG的进程.IWAM_YANG会根据计算机名而有所不同. 可以使用以下几种方式来解决 1. 重新启动iis. 在控制面板中找到管理工具->internet信息服务->右键点击左边树图第二层本地计算机->所有任务->重新启动II

响应式Web初级入门

本文来自我的前端博客,原文地址:http://www.hacke2.cn/about-responsive/ 跨终端时代的到来 当你乘坐各种交通工具(公交.地铁.轻轨.火车)时你会发现,人们都个个低下头在玩自己的手机.平板.Kindle,没错,你正在处于一个多终端设备的时代!手机用户连年上升,前几天我们在感叹以前玩沙包.陀螺,现在小孩的娱乐就是玩手机–.另外,微软的Xbox和任天堂的Wii等游戏设备也有自己的浏览器.设备真的来了.. 现在网站主流跨终端的有以下方式: 单域 比如前端乱炖和我的个人

DjangoORM一对多&多对多操作

简要说明 通过操作对象的方式操作数据库 详细步骤 models.py的结构是: 如果models.py中外键定义没有写 related_name='student_teacher', 可以直接用 studentList = teacher.student_teacher.all() 可以改写成: teacher = Teacher.objects.get(id = 1) studentList = teacher.student_set.all() =======================

PD 15.1 安装 破解 , 简单使用 (一对多,多对多关系生成sql脚本)

  1:运行  PowerDesigner15_Evaluation.exe 默认   2: 安装完毕后,不要执行,下面我们进行 破解 把 PowerDesigner15汉化+注册补丁  下的所有文件,覆盖 PD的安装目录下的文件 然后我们打开 PD,点击 帮助 –> About  看到下面窗口中红色方框,就表示已经破解 + 汉化成功 PD 15.1 安装 破解 , 简单使用 (一对多,多对多关系生成sql脚本)

Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; private String userName; // 一个用户,对应的多个地址 private Set<String> address; private List<String> addressList = new ArrayList<String>(); //private Str

Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控

目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 测试服务熔断 4. 利用turbine监控所有应用 4.1 创建工程 4.2 修改配置文件 4.3 修改启动文件 4.4 启动 5.一点点重要的事情 1.环境介绍 本篇文章涉及到前面文章的工程,mirco-service-provider.mirco-service-consumer以及需要另外新建

2019Python开发学习路线(初级入门)

Python虽然是脚本语言,但是因为容易学,迅速成为科学家的工具,从而积累了大量的工具库.架构,人工智能涉及大量的数据计算,用Python是很自然的,简单高效.因此Python大受欢迎,2019Python开发学习路线(初级入门)免费送给大家:Python允许你分割你的程序模块,可以重复使用在其他Python程序上.它配备了一个标准的模块,你可以使用你的程序的基础 - 或作为例子开始学习Python编程的大集合.这些模块提供了一些事情,如文件I / O,系统调用,插座,甚至像Tk图形用户界面接口