Ссылка на дополнительный класс UserSettings через класс ApplicationUser - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь добавить ссылку на дополнительную таблицу, а затем загрузить информацию из базы данных. Я хочу добавить UserSettings, так как пользователь может иметь несколько параметров, которые можно настроить.

Я думаю, что все настроил правильно, но каким-то образом информация из таблицы внешних ключей не загружается. Я пробовал разные посты из предыдущих вопросов, но не могу решить проблему.

Код в UserSetting.cs

public class UserSetting
{                                                     
    public string ID { get; set; }
    public string SettingType { get; set; }
    public string Description { get; set; }
    public string SettingValue { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

Код в ApplicationUser.cs

public class ApplicationUser : IdentityUser
{ 
    public virtual List<UserSetting> UserSettings { get; set; }
}

Код в AppDbContext.cs

public class AppDbContext : IdentityDbContext<ApplicationUser>
{ 
    public AppDbContext(DbContextOptions<AppDbContext> options)                                                       
        : base(options)     
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {                    
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<ApplicationUser>(b =>          
        {                                        
              b.HasMany(e => e.UserSettings) 
                    .WithOne()             
                    .HasForeignKey(uc => uc.ID) 
                    .IsRequired();                       
        });                                                
     }
}

Код в HomeController.cs

public class HomeController : Controller
{
    private readonly UserManager<ApplicationUser> userManager;
    public HomeController(UserManager<ApplicationUser> userManager
    {
         this.userManager = userManager;
    }

    public async Task<IActionResult> LoadProfile()     
    {
         var user = await userManager.FindByNameAsync("username");
    }
}

Где и как загрузить UserSettings в класс ApplicationUser, чтобы я мог ссылаться на это?

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете запросить соответствующие данные, используя Include(), как показано ниже:

public async Task<IActionResult> LoadProfile()
{
        var user = await userManager.Users
                 .Include(u=>u.UserSettings)
                 .SingleAsync(u=>u.UserName=="sherry@email.com");
}

Если вы хотите использовать FindByEmailAsync() для получения связанных данных, вы можете обратиться к этот поток для создания собственного IUserStore, куда вы загружаете связанные данные в методе FindByEmailAsyn c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...