繁体   English   中英

ASP.NET Core 中的跨模型更新

[英]Cross model update in ASP.NET Core

我对 ASP.NET Core 真的很陌生,所以如果这是一个愚蠢的问题,我深表歉意,但我花了很多时间试图解决这个问题。

我有 2 个模型, TeacherStudent 这种关系是一位老师与许多学生的关系。 这是一个后端 API 项目,我正在研究一种 PUT 方法,该方法可以在一个请求中同时更新两个模型中的字段。

这是我的Teacher课:

public partial class Teacher
{
        public Teacher()
        {
            Students = new HashSet<Student>();            
        }

        public int TeacherId { get; set; }
        public string Name { get; set; }
        ... tons of other properties ...
}    

这是我的Student类:

public partial class Student
{       
        public int Id { get; set; }
        public int TeacherId { get; set; }
        public string Name { get; set; }
        public virtual Teacher Teacher { get; set; }        
}

这是控制器:

[HttpPut("{id}")]
public async Task<IActionResult> PutTeachers(int id, TeacherViewModel model)
{            
    var result = await _service.UpdateAsync(model);          
    return Ok(result.Message);
}

(上面的代码是简化的) - 它采用了一个TeacherViewModel ,它限制了要返回的字段数 - 我使用另一个类作为服务来进行更新

这是服务类:

public class TeacherService
{
        private readonly Repository<Teacher> _repository;        

        public TeacherService(DatabaseContextWrapper context)
        {
            _repository = new Repository<Teacher>(context);            
        }

        public async Task<ITransactionResult> UpdateAsync(TeacherViewModel model)
        {
            var teacher = _repository.FindAsync(model.TeacherId).Result;

            teacher.TeacherId = model.TeacherId;
            teacher.Name = model.Name;           

            teacher.Students.Clear();

            foreach(var student in model.Students)
            {
                teacher.Students
                    .Add(new Student
                    {
                        Id = Student.Id,
                        TeacherId = Student.TeacherId
                        Name = Student.Name
                    });```
            }
        }
}

我的推理是将Student模型添加到Teacher模型下的学生,但它不会迭代。 如果我注释掉清晰的代码,更新将起作用,但不会交叉更新。 它只是不会迭代。 我想我在这一点上很迷茫。 任何帮助,将不胜感激!

编辑 1(实体关系配置)

 modelBuilder.Entity<Student>(entity =>           {                           
                entity.HasOne(d => d.Teacher)
                    .WithMany(p => p.Students)
                    .HasForeignKey(d => d.TeacherId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_Students_Teachers");
            });

这是我的配置

尝试将反向配置添加到您的父实体:

 modelBuilder.Entity<Teacher>(entity =>           
            {                           
                entity.HasMany(d => d.Students)
                    .WithOne(p => p.Teacher)
                    .HasForeignKey(d => d.TeacherId);
            });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM