Я разрабатываю приложение с 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 является организацией, а иногда — лицом. После того, какой тип (Организация или Лицо) возвращается, я хочу, чтобы свойство LegalEntityType (в случае организации) или свойство Пол (в случае лица) отображалось в коде JSON. Это моя первая проблема, следующее оставляет их обоих нулевыми:
.Include(o => o.Customer).ThenInclude(o => o.LegalEntity)
так как это не загружает свойства навигации, которые присутствуют только в наследующих сущностях. Вот выдержка из строки JSON в случае
Человек:
...
"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, и поэтому свойство клиентов «Юридическое лицо» иногда является Лицом, иногда Организацией. Когда я визуализирую JSON, необходимо поддерживать определенный тип.
Надеюсь, я был достаточно ясен - пожалуйста, извините меня так долго, я хочу быть уверен, что проблема понята.