Сопоставление объектов в ASP.NET Core с помощью C#

Я новичок в ASP.NET Core, пожалуйста, помогите мне. Я пытаюсь сопоставить объекты классов с таблицами базы данных SQL Server; пожалуйста, помогите мне получить результат желания следующим образом:

[
    {
        "ID": 1,
        "Line1": "myaddress",
        "Line2": "address2",
        "City": "mycity",
        "State": {
                     "StateID": 1,
                     "StateName": "mystate"
                 },
        "StateID": 1,
        "ZipCode":"545588"
    }
]

Мои занятия:

public class Address
{
    public int Id { get; set; }
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string City { get; set; }
    public State State { get; set; }
    public string ZipCode { get; set; }
}

public class State
{
    public int StateId { get; set; }
    public string StateName { get; set; }
}

Таблицы базы данных:

CREATE TABLE [dbo].[address]
(
    [id] [bigint] IDENTITY(1,1) NOT NULL,
    [line1] [varchar](50) NULL,
    [line2] [varchar](50) NULL,
    [city] [varchar](50) NULL,
    [stateid] [int] NULL,
    [zipcode] [varchar](20) NULL,
)

CREATE TABLE [types].[state] 
(
    [stateid] [int] IDENTITY(1,1) NOT NULL,
    [statename] [text] NULL
)

Код, считывающий данные из базы данных:

await using var conn_payoraddr = new SqlConnection(_connectionString.Value);
string query = "Select * from Address t1 left join types.State t2 on t1.stateid = t2.stateid where PayorId = @Id";

var result_addr = await conn_payoraddr.QueryAsync<PayorAddress>(query, new { Id = id });

Каков текущий выход? Единственное, что я вижу, это отсутствие StateId в объекте Address.

hakim00 09.08.2024 07:51

Это называется json. посмотрите учебник.

Peko Miko 09.08.2024 07:57

@hakim00 Хаким00 Класс адреса сопоставлен правильно, но класс состояния не сопоставлен. пожалуйста, проверьте этот скриншот. i.postimg.cc/9FV9xg6Y/Screenshot-2024-08-09-at-11-43-20-AM.p‌​ng

Pankaj 09.08.2024 08:18
отредактируйте свой пост, не пытайтесь добавлять обновления/информацию кода в качестве комментария
moken 09.08.2024 12:38

@moken ок, спасибо

Pankaj 09.08.2024 14:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Судя по вашим кодам, вы используете dapper. Используя dapper для запроса нескольких таблиц и сопоставления с вложенным объектом, вам необходимо установить свойство состояния во время метода запроса на запись.

Более подробную информацию вы можете найти в примере ниже:

Поскольку ваши коды содержат PayorAddress, но вы просто используете класс Address, я напрямую запрашиваю и сопоставляю данные с классом Address:

        using var conn = new SqlConnection(connectionString);
        int id = 1;
        string query = @"
    SELECT t1.*, t2.*
    FROM Address t1
    LEFT JOIN type.State t2 ON t1.stateid = t2.stateid
    WHERE t1.Id = @Id";

        var result = (await conn.QueryAsync<Address, State, Address>(
            query,
            (Address, state) => {
                Address.State = state;
                return Address;
            },
            new { Id = id },
            splitOn: "stateid"
        )).FirstOrDefault();

Сорт:

public class Address
{
    public long Id { get; set; }
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string City { get; set; }
    public int StateId { get; set; }
    public State State { get; set; }
    public string ZipCode { get; set; }
}
public class State
{
    public int StateId { get; set; }
    public string StateName { get; set; }
}

Результат:

Привет @brando-zhang, скажите, пожалуйста, как я могу включить более одного разделения, например: - SplitOn: "stateid,districtid" Я получаю исключение при получении результата в более чем одном разделении.

Pankaj 09.08.2024 09:59

Другие вопросы по теме