Я занимаюсь разработкой приложения с asp.net core 2.2 и ef core 2.2 на сервере и Angular 7 на стороне клиента.Я не могу понять это:
У меня есть следующие (упрощенные) модели:
public abstract class LegalEntity
{
public int Id { get; set; }
public int Name { get; set; }
public Address FiscalAddress { get; set; }
}
public class Organisation : LegalEntity
{
public Organisation(){}
public Organisation(LegalEntityType legalEntityType, string name, Address fiscalAddress)
{
LegalEntityType = legalEntityType;
Name = name;
}
public LegalEntityType LegalEntityType { get; set; }
}
public class LegalEntityType
{
public int Id { get; set; }
public int Name { get; set; }
public LegalEntityType(){}
public LegalEntityType(string name)
{
Name = name;
}
}
public class Person : LegalEntity
{
public Gender Gender { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public override string Name => string.Format("{0} {1}", FirstName, LastName);
}
public class Gender
{
public int Id { get; set; }
public int Name { get; set; }
}
public class Customer
{
public int Id { get; set; }
public Customer(){}
public Customer(LegalEntity legalEntity)
{
LegalEntity = legalEntity;
}
public LegalEntity LegalEntity { get; set; }
}
Когда я возвращаю сущности клиента клиенту через API, иногда LegalEntity является организацией,иногда человек.После того, какой тип (Organization или Person) возвращается, я хочу, чтобы свойство LegalEntityType (в случае Organization) или свойство Gender (в случае Person) было отображено в коде JSON.Это моя первая проблема, из-за следующего они оба равны NULL:
.Include(o => o.Customer).ThenInclude(o => o.LegalEntity)
, так как это не загружает свойства навигации, которые присутствуют только в унаследованных объектах.Вот выдержка из строки JSON в случае
Person:
...
"customer": {
"legalEntity": {
"gender": null,
"firstName": "Denis",
"lastName": "Testmann",
"name": "Denis Testmann",
"id": 9
},
...
Организация:
...
"customer": {
"legalEntity": {
"legalEntityType": null,
"name": "Companyname GmbH",
"id": 6
},
...
Вместо этого должно получиться следующее:
Лицо:
...
"customer": {
"Person": {
"gender": null,
"firstName": "Denis",
"lastName": "Testmann",
"name": "Denis Testmann",
"id": 9
},
...
Организация:
...
"customer": {
"Organisation": {
"legalEntityType": null,
"name": "Companyname GmbH",
"id": 6
},
...
Чтобы подвести итог: клиент может быть лицом или организацией, которые наследуют обе организации (организация и лицо)от LegalEntity и, следовательно, клиентов. Собственность «LegalEntity» иногда является Лицом, иногда Организацией.Когда я отрисовываю JSON, необходимо поддерживать определенный тип.
Надеюсь, я был достаточно ясен - пожалуйста, извините меня за то, что я так долго, я хочу быть уверен, что проблема понятна.