【问题标题】:List of values as a user attribute作为用户属性的值列表
【发布时间】:2024-01-15 00:09:02
【问题描述】:

我在 ASP.NET MVC 5 应用程序中使用标识 2.1.0,并且我有一些页面供管理员使用我定义的一些自定义用户属性来工作(创建/编辑/删除用户)。但是我需要在一个字段中存储一个值列表。如何通过使用身份来实现这一点,以及如何在网页上显示这一点?

【问题讨论】:

  • However I need to store a list of values in one field. - 为什么?能给我举个例子吗?不知道你真正想做什么就很难提供帮助......
  • 我有一个自定义属性国家的用户。我想存储一个或多个国家/地区的此属性,以便我可以根据其选择的国家/地区过滤网页。
  • 这是n:m 关系,不应该保存在“一个字段中”——我会用一个例子给你写一个答案......

标签: c# asp.net asp.net-mvc-4 asp.net-identity-2


【解决方案1】:

要保存这些值,您可以扩展您的 ApplicationUser,如果有多个值,您可以通过 n:m 关系做到这一点:

首先创建一个表来存储国家/地区值(也添加到您的DbContext,例如public DbSet<Country> Countries { get; set; }):

public class Country
{
    [Key]
    public int Id { get; set; } // or e.g. "string Code" to save e.g. "us"

    public string Name { get; set; }

    public List<ApplicationUsers> Users { get; set; }
}

那么您也可以将Country 的列表添加到您的ApplicationUser

public class ApplicationUser : IdentityUser<KEY>
{
     // ...

     public List<Country> Countries { get; set; }
}

最后更新用户的国家/地区,如下所示:

var user = // get user
var countryToAdd = db.Countries.FirstOrDefault(c => c.Name == countryName) ??
                       new Country() { Name = countryName };
if (user.Countries == null)
    user.Countries = new List<Country>() { countryToAdd };
else if (!user.Countries.Contains(countryToAdd))
    user.Countries.Add(countryToAdd);

db.SaveChanges();

并获得来自一个国家/地区的所有用户:

var country = db.Countries.Include(c => c.Users)
                .FirstOrDefault(c => c.Name == countryName);
if (country != null)
{
    var users = country.Users;
}

【讨论】:

    最近更新 更多