1

我想知道实体框架4.1代码第一你们如何处理涉及现有aspnet_Users表的查询?实体框架代码第一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的一部分?

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

回答

0

你并不真的需要使用实体框架来访问aspnet_membership供应商帐户。您实际上只需创建成员资格对象的实例,传入唯一的用户标识和一个布尔值,该值指示是否更新用户的LastActivityDate值,并且该方法返回一个MembershipUser对象,该对象由来自数据源的当前值填充指定的用户。

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

例子:

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

Response.Write(user.UserName); 

如果您有关于额外的MembershipProvider问题,你可以的“Managing Users by Using Membership”的标题下的MSDN网站上阅读它。

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

+0

您好,感谢回答,但我只是不希望只有一个用户,如果我有用户的集合返回的我怎么每行的用户名会发生什么的用户名? – DotnetShadow

+0

您可以使用此:MembershipUserCollection用户= Membership.GetAllUsers();它获取数据库中所有用户的集合。然后,您可以的foreach该集合就像使用任何其他集合。 – Chris

2

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

+0

谢谢。这就是我想要指出的一点,开发人员真的应该使用通过成员提供者给他们的类和方法。 – Chris

+0

感谢您的回应,所以为了更好地理解我在上面的例子中使用linq的观点,你是说我有一个SQL视图,并且我将该视图映射为具有各种属性的用户信息对象?然后我用linq的那个对象?或者如果可能,你能否提供一个例子? – DotnetShadow

+0

是的,这就是我的意思。 –

1

首先阅读拉迪斯拉夫的答案。如果你仍然想继续:做你想做的事情,包括将用户和角色以及成员表映射到codefirst域 - 这意味着用代码优先编写成员提供者。

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

我与笔者上更好地执行保护会员数据的工作(密码,上次登录的日期,所有非允许的数据),但允许你映射和扩展用户表。但尚未准备好!