Entity Framework Code First 模式-建立多对多联系
Entity Framework 在建立多对多的联系时,会生成一个中间表,用来表示这个多对多的关系。这和数据库设计时从概念模型到逻辑模型转化时,多对多的关系不能和任何一端的实体合并,需要将关系也转化为关系模型。例子使用角色(Role)和用户(User),一个角色会有多个用户,一个用户拥有多个角色。
1.默认约定
代码:
public partial class Role
{
public int RoleID { get; set; }
public string RoleName { get; set; } public virtual ICollection<User> Users { get; set; }
}
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public Nullable<bool> IsValid { get; set; } public virtual ICollection<Role> Roles { get; set; }
}
结果:



2.FluentAPI 方式
这边展示用映射类的方式去建立表,即为每个实体类去建立一个映射到数据库的类,在这里面定义映射到数据库的相关属性。
代码:
public partial class Role
{
public int RoleID { get; set; }
public string RoleName { get; set; } public virtual ICollection<User> Users { get; set; }
}
Role类
public class RoleMap:EntityTypeConfiguration<Role>
{
public RoleMap()
{
//主键
this.HasKey(s => s.RoleID); //属性的特性
this.Property(s => s.RoleName)
.HasMaxLength(); //类映射到数据库表和列的相关说明
this.ToTable("Role");
this.Property(s => s.RoleID).HasColumnName("Id"); //实体关系之间的定义
this.HasMany(s => s.Users)
.WithMany(s => s.Roles)
.Map(m =>
{
m.ToTable("RoleUser");
m.MapLeftKey("RoleId");
m.MapRightKey("UserID");
}); }
}
RoleMap 映射类
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public Nullable<bool> IsValid { get; set; } public virtual ICollection<Role> Roles { get; set; }
}
User 类
public UserMap()
{
//主键
this.HasKey(s => s.UserID); //属性
this.Property(s => s.UserName)
.HasMaxLength(); // //类映射到数据库表和列的相关说明
this.ToTable("User");
this.Property(s => s.UserName).HasColumnName("Name");
}
UserMap 映射类
在数据上下文类中的OnModelCreating方法加入如下代码:
modelBuilder.Configurations.Add(new RoleMap());
modelBuilder.Configurations.Add(new UserMap());
结果:



Entity Framework Code First 模式-建立多对多联系的更多相关文章
- Entity Framework Code First 模式-建立一对多联系
一.建立一对多联系 使用的例子为Product与Category,一个种类(Product)对应多个商品(Product) 1.外键列名默认约定 在“一”这边的实体增加一个集合属性(public vi ...
- Entity Framework Code First 模式-建立一对一联系
使用的例子为教室(ClassRoom),教室里的多媒体设备(Device),一个教室里有一套多媒体设备,一套多媒体设备只放在一个教室里. 1.Data Annotations方式 需要在任意一方的主键 ...
- Entity Framework Code First (三)Data Annotations
Entity Framework Code First 利用一种被称为约定(Conventions)优于配置(Configuration)的编程模式允许你使用自己的 domain classes 来表 ...
- Entity Framework Code First (二)Custom Conventions
---------------------------------------------------------------------------------------------------- ...
- Entity Framework Code First 映射继承关系
转载 http://www.th7.cn/Program/net/201301/122153.shtml Code First如何处理类之间的继承关系.Entity Framework Code Fi ...
- 使用 Entity Framework Code First
使用 Entity Framework Code First 在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码 ...
- Entity Framework Code first(转载)
一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...
- Entity Framework Code First 学习日记(1)精
我最近几天正在学习Entity Framework Code First.我打算分享一系列的学习笔记,今天是第一部分: 为什么要使用Code First: 近 年来,随着domain driven d ...
- Entity Framework Code First学习系列目录
Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...
随机推荐
- NX二次开发-NXOPEN自动切换到工程图模块
UFUN的API里是没有切换到工程图的函数的,NXOPEN里是有方法可以用的.不过应该是不支持NX9以下的版本. NX9的不能录制出来,在UI类里有方法 NX9+VS2012 #include < ...
- [Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?
转:http://blog.csdn.net/alexander_xfl/article/details/9150971 RunTime.exec()这个接口可以说是给我们开发者提供了一个很好的直观操 ...
- ViewGroup全面分析
转:http://www.cnblogs.com/lqminn/archive/2013/01/23/2866543.html 一个Viewgroup基本的继承类格式如下: 1 import andr ...
- 牛客多校第八场 C CDMA 线性代数:沃尔什矩阵
题意: 构造出一个由1和-1组成的$2^k*2^k$的矩阵,使得矩阵任意两列内积为0 题解: 数学知识,沃尔什矩阵.沃尔什矩阵的特性被CDMA(码分多址)采用,使得编码成为无线信号的频段和振幅之外的第 ...
- detours3.0文档翻译
拦截二进制函数 Detours库可以在运行过程中动态拦截函数调用.detours将目标函数前几个指令替换为一个无条件跳转,跳转到用户定义的detour函数.被拦截的函数保存在trampoline函数中 ...
- JVM内核-原理、诊断与优化学习笔记(六):类装载器
文章目录 class装载验证流程 class装载验证流程 class装载验证流程 -加载 class装载验证流程 -链接 验证 链接 -> 验证 文件格式的验证 元数据验证(class文件简单语 ...
- 【POJ】1502 MPI Maelstrom
题目链接:http://poj.org/problem?id=1502 题意:一个处理器给n-1个处理器发送广播,问最短时间.广播时并发,也就是各个路径就大的一方.输入如果是x的话说明两个处理器不能相 ...
- foreach循环的简单写法
简单的foreach循环写法: pickedItems.ForEach(item => { this.List.Remove(item); }); //注意,List 必须和pickedItem ...
- vue-router如何参数传递
1.我们用<router-link>标签中的to属性进行传参,需要您注意的是这里的to要进行一个绑定,写成:to 先来看一下这种传参方法的基本语法: <router-link :to ...
- adb命令 logcat日志抓取
一.logcat抓log方法:adb logcat命令,可以加条件过滤 1.安装SDK(参考android sdk环境安装) 2.使用数据线链接手机,在手机助手的sdcard中建立一个1.log的文件 ...