使用实体框架在 C# 中创建外键时遇到问题

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

我正在使用 ASP.NET 和实体框架构建一个简单的应用程序。我希望用户能够登录,创建一个“角色”,并显示在特定用户帐户上创建的所有角色。

我正在使用 PostgreSQL 数据库,为了实现我正在寻找的功能,我在

Characters
表中创建了一个列来填充
ApplicationUsers
表中的用户 ID。

问题是,我不知道如何在创建新角色时用用户 ID 填充该列。该角色在

Character
表中创建,但
UserId
列填充为 NULL。

这些是我的数据模型:

public class ApplicationUser : IdentityUser
{
    [PersonalData]
    [Column(TypeName = "varchar(100)")]
    public string FirstName { get; set; }

    [PersonalData]
    [Column(TypeName = "varchar(100)")]
    public string LastName { get; set; }

    [ForeignKey("UserId")]
    public List<Character> Character { get; set; }
}

public class Character
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string CharacterName { get; set; }
    public int Age { get; set; }
    public string Profession { get; set; }

    public string UserId { get; set; }
}

这些是我在 PostgreSQL 中的表:

AspNetUsers table

Characters table

这是我的 DbContext:

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

    public DbSet<Character> Characters { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
    }
}

我尝试了不同的组合:在 .NET 方面只有外键标记,在 PostgreSQL 中的

Characters
表中添加外键约束,只有外键约束,将以下代码添加到
 DbContext
:

{
    base.OnModelCreating(builder);
        
    builder.Entity<Character>()
                .HasOne(m => m.ApplicationUser)
                .WithMany(m => m.Character);
}

如前所述,我想要发生的是用

UserId
表中的 Id 填充
Characters
表中的
AspNetUsers
列。

c# asp.net postgresql entity-framework .net-core
1个回答
0
投票

您需要将 HasForeignKey() 添加到您的模型构建器中:

{
    base.OnModelCreating(builder);
    
    builder.Entity<Character>()
            .HasOne(m => m.ApplicationUser)
            .WithMany(m => m.Character)
            .HasForeignKey(m => m.UserId);
}
© www.soinside.com 2019 - 2024. All rights reserved.