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

Blazor/C#/ASP.NET Core MVC:Person实体加列表属性迁移报错如何解决

步骤1:修改实体类,显式配置一对多关系

public class Person
{
    [Key]
    public int Id { get; set; } 
    public bool ShowPerson { get; set; } //用于在客户端主数据库展示该人员信息
    public int Age { get; set; }
    public string Name { get; set;}
    // 初始化列表避免空引用异常
    public List<UserText> ListOfTexts{ get; set; } = new List<UserText>(); 
}

public class UserText
{
    public int Id { get; set; }
    [Required]
    public string Text { get; set; }   
    // 新增外键,关联Person主键
    public int PersonId { get; set; }
    // 可选:添加反向导航属性,方便后续关联查询
    public Person Person { get; set; }     
}

步骤2:调整AppDbContext配置

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options)
        : base(options)
    {
    }

    public DbSet<Person> People { get; set; }
    // 新增UserText的数据集
    public DbSet<UserText> UserTexts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        // 先插入Person的种子数据,不要给导航属性赋值
        modelBuilder.Entity<Person>().HasData(new Person
        {
            Id = 1,
            ShowPerson  = true,
            Age = 12,
            Name = "John"
        });

        // 单独插入UserText的种子数据,显式指定外键PersonId
        modelBuilder.Entity<UserText>().HasData(
            new UserText{ Id = 1, Text = "I want to keep things simple", PersonId = 1},
            new UserText{ Id = 2, Text = "I want to keep things clean", PersonId = 1}
        );
    }
}

步骤3:查询时主动加载导航属性

EF Core默认不会自动加载关联的导航属性,你查询Person数据的时候需要用Include方法手动加载ListOfTexts,这样Blazor前端才能正常遍历:

// 示例查询方法,获取指定Id的Person及关联的所有文本
public Person GetPersonWithTexts(int personId)
{
    return _dbContext.People
        .Include(p => p.ListOfTexts)
        .FirstOrDefault(p => p.Id == personId);
}

增删文本实现逻辑

  • 新增文本:直接新建UserText对象,赋值PersonId为当前人员的Id,添加到UserTexts数据集后保存即可
  • 删除文本:找到对应的UserText对象,调用Remove方法后保存即可

你原有的Blazor前端代码不需要做任何修改,直接遍历Person.ListOfTexts即可正常展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:45:04