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
相关产品推荐
相关产品推荐

