我有Student
个实体,其中有Class
个(班级可以有很多学生)
这是我的Student.cs和StudentDto.cs
public partial class Students
{
public int Id { get; set; }
public string FullName { get; set; }
public int? FkClass { get; set; }
}
public class StudentsDTO
{
public int Id { get; set; }
public string FullName { get; set; }
public int FkClass { get; set; }
public int FkClassNavigationId { get; set; }
public string FkClassNavigationTitle { get; set; }
}
当我创建新学生并从下拉列表中选择班级ID时,而不是使用该班级,而是创建了新班级(具有空值和随机ID)。 我不确定解决此错误的最佳方法在哪里?是Automapper,context.cs类中的问题还是我的add方法本身错了?
在我的服务中,我这样做:
public Students PostStudent(StudentsDTO item)
{
var sub = _mapper.Map<Students>(item);
_repository.PostStudent(sub);
return sub;
}
,然后在存储库中执行以下操作:
public void PostStudent(Students c)
{
this.museumContext.Add(c);
this.museumContext.SaveChanges();
}
Automapper.cs:
CreateMap<Students, StudentsDTO>()
.ReverseMap();
和上下文。
modelBuilder.Entity<Students>(entity =>
{
entity.ToTable("students");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.FkClass).HasColumnName("fkClass");
entity.Property(e => e.FullName)
.HasColumnName("fullName")
.HasMaxLength(255);
entity.HasOne(d => d.FkClassNavigation)
.WithMany(p => p.Students)
.HasForeignKey(d => d.FkClass)
.HasConstraintName("Include");
});
有人可以帮助我了解如何解决此问题吗?
奇怪的是,如果我将var a = _classesService.GetClassById(s.FkClass);
添加到控制器中,则可以正常工作。不是我要分配检索到的内容或任何东西。
[HttpPost]
[AllowAnonymous]
public IActionResult PostStudent([FromBody] StudentsDTO s)
{
if (!this.ModelState.IsValid)
{
return this.BadRequest(ModelState);
}
try
{
var a = _classesService.GetClassById(s.FkClass);
var sub = this._service.PostStudent(s);
return Ok();
}
catch (Exception err)
{
return BadRequest(err);
}
}