实体框架代码首先是aspnet_Users映射/连接

时间:2011-06-29 01:05:19

标签: entity-framework entity-framework-4 entity-framework-4.1

我想知道Entity Framework 4.1代码首先如何处理涉及现有aspnet_Users表的查询?

基本上我需要一个涉及aspnet_Users的查询,以便我可以返回用户名:

SELECT t.Prop1, u.Username
FROM Table1 t 
INNER JOIN aspnet_User u ON t.UserId = u.UserId
Where t.Prop2 = true

理想情况下,我想在linq:

from t in context.Table1
join u in context.aspnet_Users on t.UserId equals u.UserId
where t.Prop2 = true

但是我不确定如何让aspnet_Users映射到类User?如何让aspnet_Users成为我的dbset的一部分?

任何帮助将不胜感激,提前感谢

3 个答案:

答案 0 :(得分:2)

不要映射aspnet_Users表或任何其他与aspnet相关的表。这些表有自己的数据访问权限和自己的访问逻辑。映射这些表将引入代码重复,可能的问题并打破关注点的分离。如果您需要用户进行查询,请使用ID,用户名,电子邮件等所需信息创建视图并映射视图。关键是视图是只读的,它只包含允许的数据,如果不使用ASP.NET API,您的应用程序不会意外地修改这些数据。

答案 1 :(得分:1)

首先阅读Ladislav的回答。如果您仍想继续:执行您想要的操作将涉及将用户和角色以及成员表映射到codefirst域 - 这意味着在代码优先编写成员资格提供程序。

幸运的是,http://codefirstmembership.codeplex.com/有一个项目,虽然它不是一个完美的实现。原文是VB,在讨论选项卡中查看我在c#MVC中运行它的工作。

我正在与作者合作,以更好地实现保护会员数据(密码,上次登录日期,所有非允许数据),但允许您映射和扩展用户表。但尚未准备好了!

答案 2 :(得分:0)

您实际上不需要使用Entity Framework来访问aspnet_membership提供程序帐户。您真的只需要创建成员资格对象的实例,传入唯一的用户标识符和布尔值,指示是否更新用户的LastActivityDate值,该方法返回一个MembershipUser对象,该对象使用数据源中的当前值填充指定用户。

然后,您可以使用“用户名”属性访问用户名。

示例:

private MembershipUser user = 
    Membership.GetUser(7578ec40-9e91-4458-b3d6-0a69dee82c6e, True);

Response.Write(user.UserName);

如果您对MembershipProvider有其他疑问,可以在MSDN网站上以“Managing Users by Using Membership”标题阅读。

希望这可以帮助您满足您的要求。