我在存储登录用户的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访问它。我还想以这种方式在数据库中保持清晰,而不是一堆指南。
答案 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);
}