Предположим, у меня есть следующие определения таблиц в Oracle.
Код: Выделить всё
create table customer
(
id number(10),
name nvarchar2(1024),
primary key (id)
);
create table customer_order
(
id number(10),
customer_id number(10),
name nvarchar2(1024),
primary key (id),
foreign key (customer_id) references customer(id)
);
Код: Выделить всё
public class Customer
{
public int ID { get; set; }
public string? Name { get; set; }
public List CustomerOrders { get; set; } = new List();
}
public class CustomerOrder
{
public int ID { get; set; }
public string? Name { get; set; }
}
Код: Выделить всё
select a.id customer_id, a.name customer_name, b.id customer_order_id, b.name customer_order_name
from customer a inner join customer_order b on a.id = b.customer_id
order by a.id, b.id
Кроме того, оба класса C# (Customer и CustomerOrder) имеют одинаковые имена свойств. А также идентификатор и имя.
Мы хотим, чтобы определение класса DB и C# было ясным и не многословным (идентификатор в разделе «Клиент» — это идентификатор клиента, и нет необходимости указывать его явно. ).
Поскольку Dapper сопоставляет столбец БД со свойством C# либо по имени параметра конструктора, либо по имени свойства, как это может быть сопоставлено Dapper автоматически или как лучше всего это сделать в dapper?
Даже я могу изменить имя столбца на уровне запроса SQL (ID на CUSTOMER_ID и т. д.), имя свойства класса C# не может быть изменено таким образом. Я пытался использовать System.ComponentModel.DataAnnotations.Schema.ColumnAttribute как с именем столбца в верхнем регистре (Oracle должен возвращать верхний регистр, но все равно пробовал оба), так и с именем столбца в нижнем регистре (
Код: Выделить всё
[Column(name: "CUSTOMER_ID")]Любая помощь приветствуется.
Подробнее здесь: https://stackoverflow.com/questions/791 ... with-the-c
Мобильная версия