使用UserName作为实体框架中的外键创建ApplicationUser导航属性

时间:2018-12-27 14:50:19

标签: c# asp.net entity-framework asp.net-core entity-framework-core

我在存储登录用户的UserName的实体上有一个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。

我知道,如果我选择在CreatedBy字段中存储UserId而不是UserName,这将很容易实现,但是大多数人都将UserName存储在CreatedBy字段中,因为可以轻松地通过Current HttpContext访问它。我还想以这种方式在数据库中保持清晰,而不是一堆指南。

1 个答案:

答案 0 :(得分:0)

是的!您可以通过使用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);
}