Создание свойства навигации ApplicationUser с использованием UserName в качестве внешнего ключа в Entity Framework - PullRequest
0 голосов
/ 27 декабря 2018

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

Свойства моей сущности выглядят так:

public int Id { get; set; }
public string Name { get; set; }
// public ApplicationUser CreatedByUser { get; set; }
public string CreatedBy { get; set; }

Как я могу заставить свойство навигации CreatedByUser действительно работать.Я бы хотел, чтобы он автоматически получался при использовании «Включить» в моих запросах, поэтому у меня есть доступ к:

Product.CreatedByUser.FirstName и Product.CreatedByUser.LastName.

Я знаю, что это легко сработает, если я решу сохранить UserId, а не UserName в поле CreatedBy, но большинство людей хранят UserName в поле CreatedBy, так как к нему легко получить доступ через текущий HttpContext.Я также хотел бы сохранить это для ясности в базе данных, вместо того, чтобы иметь кучу руководств.

1 Ответ

0 голосов
/ 27 декабря 2018

Да!Это можно сделать с помощью функции Entity Framework Core Alternate Keys следующим образом:

Ваш объект:

public class YourEntity
{
    public int Id { get; set; }
    public string Name { get; set; }

    public string CreatedBy { get; set; }

    public ApplicationUser CreatedByUser { get; set; } 
}

Затем в конфигурации модели:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<YourEntity>()
        .HasOne(e => e.CreatedByUser)
        .WithMany()
        .HasForeignKey(e => e.CreatedBy)
        .HasPrincipalKey(cu => cu.UserName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...