2012-08-30 247 views
0

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

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

我该怎么做?

感谢

+0

我怀疑你这个逻辑。通常,用户只能注册一个网站。允许用户拥有多个网站的会员资格会让用户感到困惑,他们不明白为什么他们已经注册了他们没有注册的网站。 –

+0

其实这是一个CMS,并且用户不注册。管理员可以访问编辑一个或多个网站。当然,CMS将处理具有相同公司相同数据结构的多个网站。 – user1027620

+0

如果用户不注册,他们如何获得用户名和密码?我希望你不要把它们发给他们。 –

回答

1

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

这里是我的方法 -

1)使用新ASP.Net Universal Provider

2)实施Custom Membership Provider并覆盖

public override bool ValidateUser(string username, string password) 

这样就可以验证用户对用户表以及网站表。

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 

数据库关系

enter image description here

+0

上面的解决方案也起作用,你的真的更好,为什么?请告诉我。 – user1027620

+0

如果我必须像您的项目一样实施,我将使用上述步骤。如果您对每一步有任何具体问题,请提出一个新问题,以便对其他人也有所帮助。 – Win

+0

我需要知道的是,如果上面的答案在实践中不好,因为它可能会导致将来的错误,只是为了创建与会员api表的关系。 – user1027620

1

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

+0

丹尼斯,谢谢你的回答。我不知道如何正确实现这一点。我应该在Websites表中有外键吗?我需要一个两对多的关系。 – user1027620

+0

然后您可能需要一个关联表。例如'Users_on_Websites'。此表将具有'UserId'和'WebsiteId'作为其唯一列。他们必须链接到'aspnet_Users'和'网站'作为外键。如果您在EF映射中包含三个表格,则EF将识别m-to-n关系。 –

+0

@ user1027620 - 多对多关系需要一个单独的表来管理连接。这有时称为联结表,联合表,链接表等。 –