Entity Framework, 多对多关系,查询时的问题

wlmstar 2011-09-27 05:36:10
有一个场景,3张表,User{Id,UserName,Password}, Role{Id,RoleName}, UsersInRoles{UserId,RoleId},
可见:User 表和 Role表是通过 UsersInRoles 引用2个表外键,来维护一个多对多的关系。
以下是我写的适配EF的代码,在OnModelCreating 方法中我维护了这样的关系。
并且当我测试对已存在的User对象,User.Roles.Add(new Role), 然后save 后, 可以看到在UsersInRoles表中插入了记录。
我的问题是,我如何才能在通过用户名获取User对象的时候,同时获取该User所拥有的Role, EF可以帮我做到吗?

public partial class User
{
public Int64 Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public virtual IList<Role> Roles { get; set; }
}

public partial class Role
{
public Int64 Id { get; set; }
public string RoleName { get; set; }
public string Description { get; set; }
public virtual IList<User> Users { get; set; }
}


public class RuntimeDBContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
//public DbSet<UsersInRole> UsersInRoles { get; set; }

public RuntimeDBContext (string nameOrConnectionString)
: base(nameOrConnectionString)
{
}

protected override void OnModelCreating (DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(b => b.Roles)
.WithMany(c => c.Users)
.Map
(
m =>
{
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
m.ToTable("UsersInRoles");
}
);

base.OnModelCreating(modelBuilder);
}
}
...全文
6951 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
世界因你而小 2012-09-24
  • 打赏
  • 举报
回复
还没解决?
zhou349398998 2012-03-27
  • 打赏
  • 举报
回复
楼主能给个你 这个项目的列子么 谢谢 349398998@qq.com
dhttaso 2012-03-10
  • 打赏
  • 举报
回复

var result=from c in entity.User
from r in c.Roles
where 你的条件

<a href="http://www.cnblogs.com/xcj1989/archive/2012/03/10/entity_framework_many_to_many_select.html">你可以参考这里</a>
dhttaso 2012-03-10
  • 打赏
  • 举报
回复

//初始化
var marine_user = this.Database.GetQueryable<marine_User>();
var marine_role = this.Database.GetQueryable<marine_Role>();
var marine_permission = this.Database.GetQueryable<marine_Permission>();

//查询出拥有指定权限的角色列表
var queryRole = from p in marine_permission
from r in marine_role
from rp in r.marine_Permission
where rp.PermissionID == p.PermissionID && p.Namepace + "." + p.Controller + "." + p.Action + "," + p.Assembly == actionName
select r;

//查询出拥有 queryRole 角色的用户列表
var queryUser = from u in marine_user
from r in queryRole
from ur in u.marine_Role
where ur.RoleID == r.RoleID
select u;

传送门:
http://www.cnblogs.com/cjnmy36723/archive/2011/07/26/2117089.html
dhttaso 2012-03-10
  • 打赏
  • 举报
回复
楼主要是解决了,通知下我。我也这问题
gmdqtd 2012-03-06
  • 打赏
  • 举报
回复
Trips 和Activities多对多的关系,多对多实现查询
var tripWithActivities = context.Trips

.Include("Activities")
夜色镇歌 2012-02-03
  • 打赏
  • 举报
回复
public virtual IList<Role> Roles { get; set; }


这个为什么加virtual 啊? 还要用IList<Role>


都是为了节省内存?

[Quote=引用楼主 wlmstar 的回复:]
有一个场景,3张表,User{Id,UserName,Password}, Role{Id,RoleName}, UsersInRoles{UserId,RoleId},
可见:User 表和 Role表是通过 UsersInRoles 引用2个表外键,来维护一个多对多的关系。
以下是我写的适配EF的代码,在OnModelCreating 方法中我维护了这样的关系。
并且当我测试对已存在的U……
[/Quote]
fycyuyan 2012-01-16
  • 打赏
  • 举报
回复
不会自动关联,我也想知道
hnswxy 2011-11-03
  • 打赏
  • 举报
回复
EF 可以做到的
你得USER 对像的时候,你就直接 User. Roles 就可以了。
EF 会自动用外键去关联的
hnswxy 2011-11-03
  • 打赏
  • 举报
回复
是的 codefirst 会自动生成表的
修炼成精 2011-10-28
  • 打赏
  • 举报
回复
哪来的UserRoles?
codefirst 自动生成关联表
q107770540 2011-09-30
  • 打赏
  • 举报
回复
var query=from ur in UserRoles
join u in User
on ur.UserId equals u.Id
join r in Role
on ur.RoleId equals r.Id
where u.UserName="name"
select new {u,r};
wuhan2010 2011-09-28
  • 打赏
  • 举报
回复
用Linq join的用法,做个连表查询。。。

8,493

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧