EntityFramework之多对多关系(四)
2024-08-25 02:54:49
上篇介绍了一对多关系,下面介绍下多对多关系代码编写。
1、新建model实体,User是用户类,Role是角色类,由于是多对多关系,必须得有一个中间类,所以产生了UserRole类
public class User
{
public int Id { get; set; }
public string Name { get; set; } public virtual ICollection<UserRole> UserRoles { set; get; }
} public class Role
{
public int Id { get; set; }
public string Name { get; set; } public virtual ICollection<UserRole> UserRoles { set; get; }
} public class UserRole
{
public int Id { get; set; }
public int UId { get; set; }
public int RId { get; set; } public virtual User User { set; get; }
public virtual Role Role { set; get; }
}
2、创建一个EntityContext并继承自DbContext
public class EntityContext : DbContext
{
public EntityContext()
: base("name=DBConnectionString")
{ } public DbSet<User> User { get; set; }
public DbSet<Role> Role { get; set; }
public DbSet<UserRole> UserRole { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
base.OnModelCreating(modelBuilder);
}
}
3、在web.config文件中添加数据库连接字符串
<connectionStrings>
<add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=ManyToMany;Integrated Security=true" providerName="System.Data.SqlClient" />
</connectionStrings>
4、接着创建实体映射
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
ToTable("User");
HasKey(u => u.Id);
}
} public class RoleMap : EntityTypeConfiguration<Role>
{
public RoleMap()
{
ToTable("Role");
HasKey(r => r.Id);
}
} public class UserRoleMap : EntityTypeConfiguration<UserRole>
{
public UserRoleMap()
{
ToTable("UserRole");
HasKey(ur => ur.Id); //WillCascadeOnDelete:不使用级联删除
HasRequired(pt => pt.User).WithMany(p => p.UserRoles).HasForeignKey(pt => pt.UId).WillCascadeOnDelete(false); HasRequired(pt => pt.Role).WithMany(t => t.UserRoles).HasForeignKey(pt => pt.RId).WillCascadeOnDelete(false);
}
}
5、我们写一些操作,让Code First生成数据库并验证数据是否新增
var user = new User() { Name = "Bob" };
db.Set<User>().Add(user); var role = new Role() { Name = "admin" };
db.Set<Role>().Add(role); db.SaveChanges(); var ur = new UserRole() { RId = role.Id, UId = user.Id };
db.Set<UserRole>().Add(ur);
db.SaveChanges(); //var list = db.Set<User>().Include("UserRoles").ToList();
//如果需要查出UserRoles下的Role可以这样
//避免通过延迟加载需要访问数据库(同样的外键实体只会访问一次,但是比较多的话还是用以下方式)
var list = db.Set<User>().Include("UserRoles.Role").ToList();
6、数据库关系图
最新文章
- [LeetCode] Peeking Iterator 顶端迭代器
- Web前端之jQuery 的10大操作技巧
- Spark高级数据分析中文版-读者交流
- [MySQL][Spider][VP]Spider-3.1 VP-1.0 发布
- 单页Web应用:
- UserControl eventhander 注册问题
- bzoj 2707 [SDOI2012]走迷宫(SCC+高斯消元)
- jquery跨域访问解决方案(转)
- OC-Objection 学习笔记之一:简单的开始
- 【每天一道算法题】Numeric Keypad
- iOS开发--SQLite重要框架FMDB的使用
- Finance财务软件(引入业务系统凭证专题)
- Elasticsearch snapshot 备份的使用方法 【备忘】
- msimg32.lib不用为绝对路径发愁
- centos磁盘空间重新分配
- 同步代码时忽略maven项目 target目录
- mysql中LIKE和REGEXP
- json、jsonp的定义和区别
- Hibernate学习第三天(2)(多对多关系映射)
- C# 安装WindowService服务和相关