小弟刚接触,可能问的问题比较业余,请大大多包含....
数据库5张表
user 用户表
userRoleMap 用户和角色对应表
role 角色表
roleMenuMap 角色和菜单权限对应表
menu 菜单权限表
我现在想给不同的角色分配不同的菜单,然后一个用户可以是多个角色,最后后台登录的时候,显示功能菜单(不重复)
比如 user 张三 可以是role里面的 仓库管理 和 销售管理 , 仓库管理和销售管理对应了很多菜单(可能会有重复的,但是菜单显示出来要唯一)
如果是用sql直接写的话,几个inner join就行了,但如果用实体框架的话该怎么做, 比如我想把把user实体里面弄个<list>menus 属性,来代表该用户可以使用的菜单 ,怎么做才能让实体框架自动去把几张表对应?
只给个大概的思路就行了,如果有相关的教程那最好了,在此谢过.....小弟新手,没有太多豆,希望大虾们不吝指点....
实体也一样的可以使用innerjoin来达到目的的。
我是想在user实体里面 加一个 menus 属性....取出用户后,这个menus属性该怎么填充啊?
还是用 database.SqlQuery 直接去查数据库 - -|
到底怎么设计能好些呢
@ssboy: 你的这个思路是对的,但是,你的这个menus不能关联到menu表,否则就不好处理了。
对这个menus属性,调用扩展方法实现SQLQUERY就ok了,这样,实体计不牵涉到业务(交给扩展方法实现)又封装了属性(menus是user的一个集合属性)。
此外,你也可以通过存储过程、视图的方式为user提供menus关联。
@519740105: 好的,谢谢,我写写试试.....有不明白的再继续追问,嘿嘿
@ssboy: 我最近的项目也有这个需求,不过我的定义可能比你的复杂,到时可以一起探讨。
这是常见权限实现的五张表,我尝试过,发现用实体来处理真不是一般的繁琐,繁琐到崩溃
后来还是采用了原生态的sql
string sql = @"SELECT DISTINCT R.* FROM PopRight R,PopUser U,PopRole RL,RoleUser RU,RoleRight RR WHERE
U.ID={0} AND U.ID=RU.UserID AND RL.ID=RU.RoleID and RL.ID=RR.RoleID and R.ID=RR.RightID ORDER BY R.SortNo";
使用DbContext.Database.SqlQuery<Right>(sql, userID).ToList()