gpt4 book ai didi

c# - Entity Framework - 具有多对多表的用户和组

转载 作者:搜寻专家 更新时间:2023-10-30 20:54:38 24 4
gpt4 key购买 nike

我遇到了一个让我原地打转的问题。我需要实现的是我们网站中的用户和群组。我们在 C# 中将 Entity Framework (数据库优先)与 ASP.NET 结合使用。

要求如下:

  1. 有用户
  2. 有组(由管理员创建,将存在于数据库中)
  3. 每个用户可以属于一个或多个组
  4. 每个组可以有 0 个或多个用户。

目前的组是:行政人员董事会编辑

简而言之,“User1”可以同时属于编辑组和董事会组,但不能属于管理员组。

首先,我用一个用户、一个组和一个用户组表构建了我的数据库。 userGroups 表具有以下字段:

User              Group
----------- ------------
UserId (PK) GroupId (PK)
Name Name
... ...

\ /
UserGroup
-------------
UserGroupTestID (PK)
UserId (FK)
GroupId (FK)

这种方法的问题是 EF 不允许我向该表添加超过 1 个用户,并抛出“违反多重约束”错误,因为它是 1 个用户对多的关系。

所以我通过删除 PK 将其更改为多对多表,如下所示:

User              Group
----------- ------------
UserId (PK) GroupId (PK)
Name Name
... ...

\ /
UserGroup
-------------
UserId (FK)
GroupId (FK)

我现在能够访问 user.Group 并能够向该用户添加一个组。当我将用户添加到组时,我正在查询现有组并像这样添加它:

user.Groups.Add( ctx.Groups.Where( g => g.GroupID == 12 ).First( );

问题在于,这会在组表中为该用户创建一个新组 - 即使该组的 ID 在保存到数据库时是正确的 (12)。

我需要做以下事情:

  1. 创建一个用户并将新用户放入 1 个或多个组。
  2. 编辑现有用户以将其添加到组或从组中删除。

我确信我做错了什么(而且可能是愚蠢的),但如果有人能帮助我实现这一点,我将非常感激。

提前致谢!

Admin_AddUser.aspx.cs 中的代码:

User user = new User( );
user.CustomerID = CustomerID;
user.IsClub = false;
user.IsDistrict = true;
user.FirstName = txtFirstName.Text;
user.LastName = txtLastName.Text;
user.Email = txtEmail.Text;
user.Password = txtPassword.Text;
user.AccountActive = true;

foreach( RadListBoxItem item in lbSelectedRoles.Items )
{
user.Roles.Add( UserData.GetRole( DCManager.Instance.SiteSettings.Customer.CustomerID, int.Parse( item.Value ) ) );
}

bool rtn = UserData.CreateUser( user );
...

CreateUser 方法中的代码:

public static bool CreateUser( User user )
{
using ( var ctx = new DCEntities( ) )
{
//Check if the login credentials already exist
if ( ctx.Users.Where( u => u.Email == user.Email
&& u.Password == user.Password ).Count( ) > 0 )
return false;
else
{
ctx.Users.Add( user );
ctx.SaveChanges( );

return true;
}
}
}

=========================

在我的项目中,组实际上称为“角色”

由于数据库中的 UserGroups 表是多对多的,因此它没有显示在 EDMX 文件中,但是用户和组(我的数据库中的角色)是多对多链接的。 Objects

映射详细信息:

User Mapping Details Roles Mapping Details

最佳答案

如果我正确理解你的问题。我建议您执行以下操作:

  1. 创建表 UsersAndGroups(int:PK,UserId:FK,GroupId:FK)。
  2. 在 Users 和 UsersAndGroups 之间建立一对多关系。
  3. 在 Groups 和 UsersAndGroups 之间建立一对多关系。
  4. 删除用户和组之间的关系。

这将使您能够:

  1. 通过向 UsersAndGroups 表添加行将用户添加到一个或多个组。
  2. 通过从 UsersAndGroups 表中选择具有特定 UserId 的所有记录来获取用户组。
  3. 通过从 UsersAndGroups 表中选择具有特定 GroupId 的所有记录来获取组用户。

希望我没听错。

关于c# - Entity Framework - 具有多对多表的用户和组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27869169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com