Entity Framework Many to Many Relation Mapping(Entity Framework多对多关系映射)
2017-04-17 11:01
453 查看
通常我们在做数据库设计时都会有两张表是多对多关系的时候,在数据库做多对多关系时候我们通常通过中间关联表来处理,那我们现在在EF中是如何处理的呢?
假设我们有如下关系,用户(User)包含多个角色(Role),角色包含多个用户的情况下,我们如何用EF来处理这样的数据库设计呢?
接下来看如下代码清单:
首先看我们的User、Role实体
接下来,我们知道用户包含多个角色,那么在User实体中添加这样的代码
在User的构造函数中添加这样代码
同样的,角色也包含多个用户,那么在Role实体中添加这样代码
在Role构造函数中添加这样代码
接下来,构造我们继承自DbContext类的DataContext类
接着,我们生成我们项目,就可以看到我们生成的数据库关系了
可以看到我们中间的链接表生成的是User_UserId、Role_RoleId,但实际工作中我们可能不会这样定义或者希望可以更多定制化,接下来我们通过Fluent API(注:我这里直译为流畅的API声明,大家可以看字面意思理解,我不一定对)方式来进行数据声明,我们这里关系是一个用户可以包含多个角色,一个角色也可以包含多个用户,那我们在DataContext的OnModelCreating重载方法里这样写:
进一步我们指定中间链接表
参考资料:
http://www.cnblogs.com/panchunting/p/entity-framework-code-first-fluent-api-configuring-relationships.html
假设我们有如下关系,用户(User)包含多个角色(Role),角色包含多个用户的情况下,我们如何用EF来处理这样的数据库设计呢?
接下来看如下代码清单:
首先看我们的User、Role实体
public class User { public User() {} public int UserId { get; set; } public string Name { get; set; } public string Password { get; set; } public string PasswordSalt { get; set; } public Byte Status { get; set; } public DateTime CreatedDate { get; set; } public DateTime ModifiedDate { get; set; } } public class Role { public Role() {} public int RoleId { get; set; } public string RoleName { get; set; } }
接下来,我们知道用户包含多个角色,那么在User实体中添加这样的代码
public virtual ICollection<Role> Roles { get; set; }
在User的构造函数中添加这样代码
this.Roles = new HashSet<Role>();
同样的,角色也包含多个用户,那么在Role实体中添加这样代码
public virtual ICollection<User> Users { get; set; }
在Role构造函数中添加这样代码
this.Users = new HashSet<User>();
接下来,构造我们继承自DbContext类的DataContext类
public class DataContext : DbContext { public DataContext() : base("DataContext") { } public DbSet<User> Users { get; set; } public DbSet<Role> Roles { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { } }
接着,我们生成我们项目,就可以看到我们生成的数据库关系了
可以看到我们中间的链接表生成的是User_UserId、Role_RoleId,但实际工作中我们可能不会这样定义或者希望可以更多定制化,接下来我们通过Fluent API(注:我这里直译为流畅的API声明,大家可以看字面意思理解,我不一定对)方式来进行数据声明,我们这里关系是一个用户可以包含多个角色,一个角色也可以包含多个用户,那我们在DataContext的OnModelCreating重载方法里这样写:
modelBuilder.Entity<User>() .HasMany(r => r.Roles) .WithMany(u => u.Users);
进一步我们指定中间链接表
modelBuilder.Entity<User>() .HasMany(r => r.Roles) .WithMany(u => u.Users) .Map(ur => { ur.MapLeftKey("UserId"); ur.MapRightKey("RoleId"); ur.ToTable("UserRoles"); });
参考资料:
http://www.cnblogs.com/panchunting/p/entity-framework-code-first-fluent-api-configuring-relationships.html
相关文章推荐
- Many To Many Mappings in Entity Framework
- Many to Many relation with Entity Framework
- 实体框架映射白皮书(EntityFrameworkMappingWhitePaper)(转)
- Hibernate One-to-Many Mappings 一对多关系映射
- 实体框架映射白皮书(EntityFrameworkMappingWhitePaper) Part 1
- Entity framework and many to many queries unusable?
- Entity Framework Code-First(12):Configure One-to-Many
- Entity Framework Code-First(13):Configure Many-to-Many
- 实体框架映射白皮书(EntityFrameworkMappingWhitePaper)(转)
- 自己总结一下关联关系映射中的OneToMany,ManyToOne,单向,双向注意的事项!ps:例子
- hibernate关系映射--双向多对多@ManyToMany
- EntityFramework Core是否可以映射私有属性呢?了解一下。
- nhibernate入门系列: one-to-many映射
- org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: sys.entity.Role; nested exception is org.hibernate.PersistentObjectException: 的解决方案
- AOD.NET Entity Framework 实体框架 学习(2 模型和映射)
- nhibernate: one-to-many映射
- 014 一对多关联映射 单向(one-to-many)
- [ADO.Net] ADO.NET Entity Framework To MySql 简单测试配置
- Hibernate多对多映射为第三张表manytomany【xml和注解】实例(十七)
- hibernate映射技巧one-to-many(双向一对多)