Я работаю над Entity Framework Core.
Моя задача - выполнить хранимую процедуру и заполнить DTO на основе результата этой хранимой процедуры.Мне сложно сопоставить свойства класса DTO с результатом хранимой процедуры, особенно когда мне нужно сопоставить это свойство объекта (другого типа класса).
Рассмотрим следующие классы DTO
public class Contact
{
public int Id { get; set; }
public string Name { get; set; }
public string EmailAddress { get; set; }
public Company Company { get; set; }
}
public class Company
{
public int Id { get; set; }
public string Name { get; set; }
}
Мой SQL-запрос для хранимой процедуры:
SELECT
Id = contact.id,
Name = LTRIM(RTRIM(contact.name)),
EmailAddress = LTRIM(RTRIM(contact.email)),
-- company information
CustomerId = contact.cust_id
CustomerName = customer.name
FROM
contact
INNER JOIN
customer ON contact.cust_id = customer.cust_id
Я использую пакет NuGet StoredProcedureEFCore
для выполнения хранимой процедуры.
Вот код для вызова хранимой процедуры:
Task<Contact> contactDetails = null;
_context.LoadStoredProc("usp_GetContactDetails")
.Exec(r =>
{
contactDetails = r.FirstOrDefaultAsync<Contact>();
});
// TODO: need to populate Company object
Этот код работает для Id, Name, EmailAddress, но не для свойства Company, поскольку мне нужно перейти к объекту компании и заполнить свойства этого объекта.
Основано на моих исследованиях StoredProcedureEFCore
, мы можем сделать это, используя ToDictionaryAsync
или ToLookupAsync
, но я все еще не могу этого сделать.
Плюс, еще одна вещь, которую я должен сделать это асинхронно.