Я совершенно новичок в .Net Core & Entity Framework.Я работаю над проектом .Net Core, в котором есть база данных, созданная с использованием подхода Code First.В модели существует следующая структура наследования (псевдокод):
public abstract class LegalEntity{
// common properties
public virtual LegalEntityDto ToDto()
{
return null;
}
}
public class Person : LegalEntity
{
public string FirstName {get; private set;}
public DateTime? DateOfBirth {get; private set;}
// ... Other person-specific properties.
public new PersonDto ToDto()
{
return new PersonDto
{
{
Firstname = Firstname,
DateOfBirth = DateOfBirth
// ...
};
}
public class Company : LegalEntity
{
public string Abn {get; private set;}
public string CompanyName {get; private set;}
// ... Other company-specific properties.
public new CompanyDto ToDto()
{
return new CompanyDto
{
{
Abn = Abn,
CompanyName = CompanyName
// ...
};
}
(Dto следует той же структуре наследования, т.е. PersonDto & CompanyDto наследуется от LegalEntityDto).
В базе данных SQLесть таблица LegalEntity, в которой после реализации Table Per Hierarchy есть столбец для каждого свойства LegalEntity, Person и Company, а также столбец Discriminator (который заполняется именем класса модели C #).
У меня естьметод, который должен возвращать список LegalEntityDto, который может быть комбинацией объекта Person и / или Company.Код аналогичен приведенному ниже (более псевдокод):
public List<LegalEntityDto> GetImportantEntitiesForAccount(int accountNumber){
var account = DbContext.Account.FirstOrDefault(p => p.accountNumber == accountNumber);
if (account == null){
throw AccountNotFoundException("Account not found for accountNumber: " + accountNumber);
}
var importantEntities = account.ImportantEntities;
var dtos = importantEntities.Select(i => i.ToDto()).ToList();
return dtos;
}
Моя проблема заключается в вызове ToDto()
для каждого важного объекта, вызывается абстрактный метод LegalEntity ToDto () (который возвращает ноль).).Во время выполнения я вижу при проверке коллекции importantEntities
, что объекты содержат свойства Person
или Company
и отображаются в виде Castle.Proxies.PersonProxy
или Castle.Proxies.CompanyProxy
.
Мой вопрос: как я могу получить доступ к свойствам Person или Company, которые, очевидно, доступны во время выполнения, или каким-либо образом вызвать реализацию ToDto () для Person или Company? *