You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Fluent API配置AppUser与Sale表的一对多关联关系

EF Core Fluent API 配置AppUser与Sale一对多关系方案

1 调整实体类属性

因为IdentityUser默认主键Id为string类型,外键类型需要与主键保持一致,同时补充导航属性简化关联操作:

修改后的AppUser类

using System.Collections.Generic;
using Microsoft.AspNetCore.Identity;

namespace Domain
{
    public class AppUser : IdentityUser
    {
        public string DisplayName { get; set; }
        public string Bio { get; set; }
        // 新增导航属性:一个用户对应多条销售记录
        public ICollection<Sale> Sales { get; set; } = new List<Sale>();
    }
}

修改后的Sale类

namespace Domain
{
    public class Sale
    {
        public int SaleID { get; set; }
        public int SaleAmount { get; set; }
        // 调整外键类型和AppUser主键Id保持一致,若你自定义Identity主键为int则不用改
        public string UserID { get; set; }
        // 新增导航属性:一条销售记录对应一个用户
        public AppUser AppUser { get; set; }
    }
}

2 DataContext中添加Fluent API配置

在你的DataContext类的OnModelCreating方法中添加如下配置即可完成关联:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Domain;

namespace YourNamespace
{
    // 注意DataContext要继承IdentityDbContext<AppUser>而不是普通的DbContext
    public class DataContext : IdentityDbContext<AppUser>
    {
        public DataContext(DbContextOptions<DataContext> options) : base(options)
        {
        }

        // 声明DbSet
        public DbSet<Sale> Sales { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            // 必须先调用父类的OnModelCreating,否则Identity相关配置会失效
            base.OnModelCreating(modelBuilder);

            // 配置一对多关系
            modelBuilder.Entity<Sale>()
                // 一条Sale对应一个AppUser
                .HasOne<AppUser>(s => s.AppUser)
                // 一个AppUser对应多条Sale
                .WithMany(u => u.Sales)
                // 指定Sale的外键为UserID
                .HasForeignKey(s => s.UserID)
                // 指定关联AppUser的主键Id,这里可以省略,默认会关联主键,写上更清晰
                .HasPrincipalKey(u => u.Id)
                // 配置删除行为,可根据业务需求调整,比如Restrict表示删除用户时如果有关联Sale则禁止删除
                .OnDelete(DeleteBehavior.Cascade);
        }
    }
}

补充说明

如果你的项目已经自定义了IdentityUser的主键类型为int,只需要将Sale类的UserID保持为int即可,其余配置逻辑无需修改。

内容的提问来源于stack exchange,提问作者Arifullah irfann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:57:02