Я новичок в 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 });
Это называется json. посмотрите учебник.
@hakim00 Хаким00 Класс адреса сопоставлен правильно, но класс состояния не сопоставлен. пожалуйста, проверьте этот скриншот. i.postimg.cc/9FV9xg6Y/Screenshot-2024-08-09-at-11-43-20-AM.png
@moken ок, спасибо
Судя по вашим кодам, вы используете 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" Я получаю исключение при получении результата в более чем одном разделении.
Каков текущий выход? Единственное, что я вижу, это отсутствие
StateId
в объекте Address.