【问题标题】:ASP.NET Membership and EFASP.NET 成员资格和 EF
【发布时间】:2012-08-30 16:40:38
【问题描述】:

我有一个名为Websites 的表可以有很多用户。 (网站和用户之间的多对多关系)。但是,我使用 ASP.NET 内置成员 API 和实体框架来处理数据。

我想做的是使用 EF 将用户添加到网站对象:website.Users.Add(MembershipUser object here)。 就这么简单,如果这不是 Membership API,它会容易得多。但是在创建新用户时,我想从复选框列表中的网站表中分配对特定网站的访问权限。

我该怎么做?

谢谢

【问题讨论】:

  • 我质疑你的逻辑。通常,用户只注册一个网站。允许一个用户拥有多个网站的会员资格会让用户感到困惑,他们不明白为什么他们已经注册了一个他们没有注册的网站。
  • 不,实际上这是一个CMS,用户没有注册。管理员授予编辑一个或多个网站的权限。当然,CMS 会为同一家公司处理具有相同数据结构的多个网站。
  • 如果用户不注册,他们如何获得用户名和密码?我希望你不要给他们发邮件。

标签: c# asp.net sql entity-framework asp.net-membership


【解决方案1】:

您的问题要复杂得多,您可能无法在一个问题中获得所有答案。我会尽力的。

这是我的方法 -

1) 使用新的ASP.Net Universal Provider

2) 实现Custom Membership Provider 并覆盖

public override bool ValidateUser(string username, string password)

这样您就可以根据 Users 表以及 Websites 表来验证用户。

3) 自己创建注册,而不是使用 CreateUserWizard。例如,使用常规文本框。

MembershipCreateStatus status;

MembershipUser membershipUser = System.Web.Security.Membership.CreateUser(
UsernameTextBox.Text, PasswordTextBox.Text, EmailTextBox.Text, 
PasswordQuestioTextBox.Text, PasswordAnswerTextBox.Text, true, out status);

// Then assign user to website based on the selected checkboxes

数据库关系

【讨论】:

  • 上面的解决方案也有效,你的真的更好吗?为什么?请告诉我。
  • 如果我必须像您的项目一样实施,我将使用上述步骤。如果您对每个步骤有任何具体问题,请提出一个新问题,以便对其他人也有帮助。
  • 我需要知道的是你上面的答案在实践中是否不好,因为它可能会导致未来的错误,只是为了与会员 api 表建立关系。
  • 抱歉回复晚了;我正在度假。可以创建与成员资格表的关系(只要您不会向其中添加/删除列)。我添加了屏幕截图;我希望它能帮助你继续前进。
  • 我是怎么做到的。谢谢你们两个:)
【解决方案2】:

您可以在映射中包含aspnet_Users 表,并在网站表中添加相应的约束。然后,EF 将提供一个代表用户的类和这些用户的集合作为Websites 上的导航属性。

【讨论】:

  • 丹尼斯,谢谢你的回答。我不确定如何准确实现这一点。我应该在网站表中有一个外键吗?我需要一个多对多的关系。
  • 你可能需要一个关联表。 Users_on_Websites 例如。此表将具有 UserId 和 WebsiteId 作为其唯一的列。它们必须作为外键链接到aspnet_Users 和websites。如果您在 EF 映射中包含这三个表,则 EF 将识别 m-to-n 关系。
  • @user1027620 - 多对多关系需要一个单独的表来管理连接。这有时称为联结表、联合表、链接表等。
  • 打电话时website.Users.Add(如何在)添加MembershipUser?我知道联结表,但我认为以 ASP 成员身份执行上述操作并不好。
  • 请考虑对该主题进行一些研究。下面是著名作家 Julie Lerman 的介绍(在 VB.Net 中,但无论如何都很好理解):learnentityframework.com/LearnEntityFramework/tutorials/…
猜你喜欢
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多