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);
}
}
...全文
6948 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的用法,做个连表查询。。。
.NET Framework 4.0 常用类库参考手册 [微软官方 MSDN] MSDN Library - .NET Framework 4.0 - 命名空间 (节选版) 制作成了chm格式,方便离线状态下学习! ======================================= 原文地址:http://msdn.microsoft.com/zh-cn/library/ms229335.aspx ======================================= .NET Framework 类库 - 命名空间 (节选版) Microsoft.Win32 提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。 System 包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、特性和处理异常的基础类和基类。其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。 System.Collections 包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。 System.Data 包含组成大部分 ADO.NET 结构的类。ADO.NET 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。 System.Data.Common 包含由 .NET Framework 数据提供程序共享的类。.NET Framework 数据提供程序描述用于在托管空间中访问数据源(如数据库)的类的集合。 System.Data.Linq 包含支持在 LINQ to SQL 应用程序中与关系数据库进行交互的类。 System.Data.Linq.Mapping 包含用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。 System.Data.Mapping 提供用于存储数据映射信息的类型。 System.Data.Metadata.Edm 包含一组类型,这些类型表示模型中由实体框架使用的概念,以及一组帮助应用程序使用元数据的类。 System.Data.Objects 包含可访问对象服务的核心功能的类。 System.Data.Objects.DataClasses 包含以下这些类:Entity Data Model (EDM) 中定义的类型的基类、由导航属性返回的类型的基类,以及用于定义将公共语言运行 (CLR) 对象映射到概念模型中类型的特性的类。 System.Data.Sql 包含支持特定于 SQL Server 的功能的类。此类的 API 扩展已添加到 SQL Server 的 .NET Framework 数据提供程序 ( System.Data.SqlClient) 中。 System.Data.SqlClient 包含封装 SQL Server .NET Framework 数据提供程序的类。SQL Server .NET Framework 数据提供程序描述了用于在托管空间中访问 SQL Server 数据库的类集合。 System.IO 包含允许对数据流和文件进行同步和异步读写的类型。 System.Linq 包含支持使用语言集成查询 (LINQ) 的查询的类和接口。 System.Web 提供启用浏览器/服务器通信的类和接口。 ……

8,494

社区成员

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

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