如何使用实体框架核心建立关系

问题描述 投票:0回答:1

我有两个型号

public class User: Entity
{
    public string Gender { get; set; }
    public string Name { get; set; }
}

还有

public class CognitoUser : Entity
{
    public string UserId { get; set; }
    public User User{ get; set; }
    public string CognitoName { get; set; }
}

我想将 Cognito.UserId 设置为 User.Id 。我写了以下内容,但不起作用,请您纠正我,因为我不想将模型 CognitoUser 创建到用户模型中。

modelBuilder.Entity<CognitoUser>(e =>
{
    e.ToTable("CognitoUser");
    e.HasKey(p => p.UserId);
    e.HasOne(x => x.User)
    .HasForeignKey<User>(c => c.Id);
});
sql database entity-framework asp.net-core entity-framework-core
1个回答
3
投票

每个实体都需要主键,而您的

User
实体中缺少主键。

使用

Fluent API
是可选的。如果您正确设置类,实体框架将理解您想要实现的目标。

提示:

  • 使用
    [Key]
    属性指定属性为主键
  • 首选主键格式为
    {ClassName}{Id}
  • 使用
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    强制数据库 自动为您生成主键。
  • 您可以使用
    Guid
    作为主键类型,它始终是唯一且无麻烦的

此外,请查看下面的代码以了解如何创建关系。

public class User: Entity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid UserId { get; set; }

    public string Gender { get; set; }
    public string Name { get; set; }
}

public class CognitoUser: Entity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid CognitoUserId { get; set; }

    public string CognitoName { get; set; }
    
    // relation
    [ForeignKey("User")]
    public Guid UserId { get; set; }
    public User User { get; set; }
}

可视化:

© www.soinside.com 2019 - 2024. All rights reserved.