时间:2021-07-01 10:21:17 帮助过:3人阅读
public class Test : DbContext
{
//您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
//使用“Test”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
//“Study.EF.Test”数据库。
//
//如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“Test”
//连接字符串。
public Test()
: base("name=Test")
{
}
//为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First 模型
//的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109。
public virtual DbSet<Permission> Permission { get; set; }
public virtual DbSet<UserPermission> UserPermission { get; set; }
public virtual DbSet<RolePermission> RolePermission { get; set; }
public virtual DbSet<User> User { get; set; }
public virtual DbSet<Role> Role { get; set; }
}
public class Permission
{
public int Id { get; set; }
public string Name { get; set; }
}
public class UserPermission : Permission
{
public int UserId { get; set; } //基于用户的权限
}
public class RolePermission : Permission
{
public int RoleId { get; set; } //基于角色的权限
}
public class User
{
public User()
{
Permissions = new HashSet<UserPermission>();
}
public int Id { get; set; }
public string Name { get; set; }
[ForeignKey("UserId")]
public virtual ICollection<UserPermission> Permissions { get; set; } //基于用户的权限列表
}
public class Role
{
public Role()
{
Permissions = new HashSet<RolePermission>();
}
public int Id { get; set; }
public string Name { get; set; }
[ForeignKey("RoleId")]
public virtual ICollection<RolePermission> Permissions { get; set; } //基于角色的权限列表
}
生成的数据库是3张表,并不是5张表,如下图

EF 添加数据方法:
using (var text = new Test())
{
var u = new User();
u.Name = "test";
var up = new UserPermission();
up.Name = "UserPermission";
u.Permissions.Add(up); //添加用户权限
text.User.Add(u);
var role = new Role();
role.Name = "RoleTest";
var rp = new RolePermission();
rp.Name = "RolePermission";
role.Permissions.Add(rp); //添加角色权限
text.Role.Add(role);
text.SaveChanges();
}
执行结果,字段 Discriminator 是EF自己生成的字段,用来区别数据来源

User、Role、Permission数据库设计ABP
标签: