我有以下两个模型,PatientRegistry
和PartnerRegistry
。这些模型之间的关系是一对多的。
我正在尝试阅读该记录及其相关记录,但我在PartnerRegistry
处收到了损坏的JSON。我让它工作的唯一方法是使用Automapper,但为什么会发生这种情况?我是否需要为第二个模型调用上下文?我的理解是,一旦建立关系,EF就会自动执行此操作。
编辑
我删除了一些道具只是为了缩短列表
[Table("PatientsRegistry")]
public class PatientRegistry
{ [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Display(Name = "Record Id")]
public long RecordId { get; set; }
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
[Display(Name = "Patient File Number")]
public long PatientFileId { get; set; }
[Required, StringLength(50)]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required, StringLength(50)]
public string SecondName { get; set; }
[Required, StringLength(50)]
public string LastName { get; set; }
public int GenderId { get; set; }
public Gender Gender { get; set; }
public DateTime DateCreated { get; set; } = DateTime.UtcNow;
[Timestamp]
public byte[] RowVersion { get; set; }
public ICollection<PartnerRegistry> Partners { get; set; }
public PatientRegistry()
{
Partners = new Collection<PartnerRegistry>();
}
}
public class PartnerRegistry
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long RecordId { get; set; }
public long PatientFileId { get; set; }
public long PartnerFileId { get; set; }
public PatientRegistry PatientsRegistry { get; set; }
public DateTime StartDate { get; set; }
public DateTime? EndDate { get; set; }
}
我的控制器是
[HttpGet("{id}")]
public async Task<IActionResult> getAll(long Ids)
{
var patient = await context.PatientsRegistry
.Include(pt => pt.Gender)
.Include(pt => pt.Partners)
.SingleOrDefaultAsync(pt => pt.PatientFileId == Ids);
return Ok(patient);
}
输出
{
"recordId": 1,
"patientFileId": 1111,
"firstName": "John",
"secondName": "M",
"lastName": "Doe",
"genderId": 1,
"gender": {
"id": 1,
"name": "Male"
},
"dateCreated": "2017-11-25T08:40:07.75444",
"rowVersion": "AAAAAAAAB9E=",
"partners": [{
"recordId": 1,
"patientFileId": 1111,
"partnerFileId": 2222
您可以注意到缺少ef未映射的属性!
未填充的属性为StartDate
和EndDate
答案 0 :(得分:0)
我也发现这个问题可以通过这种配置全局解决,
services.AddMvc()
.AddJsonOptions(options =>
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore);