Каков наилучший способ для dapper сопоставить имя столбца, которое отличается от имени свойства класса?C#

Место общения программистов C#
Ответить
Anonymous
 Каков наилучший способ для dapper сопоставить имя столбца, которое отличается от имени свойства класса?

Сообщение Anonymous »

Чтобы упростить ситуацию,
Предположим, у меня есть следующие определения таблиц в 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; }
}
Предположим, я хочу получить список объектов Customer, при этом каждый объект Customer имеет список объектов CustomerOrder с помощью следующего SQL-кода.

Код: Выделить всё

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
Поскольку обе таблицы (customer и customer_order) имеют одинаковый идентификатор имени столбца и NAME, мне нужно изменить их на XXX_ID и XXX_NAME (где XXX = CUSTOMER или CUSTOMER_ORDER); в противном случае Oracle изменит их на ID_1, NAME_1 и т. д. (если в результате есть повторяющиеся имена столбцов)
Кроме того, оба класса C# (Customer и CustomerOrder) имеют одинаковые имена свойств. А также идентификатор и имя.
Мы хотим, чтобы определение класса DB и C# было ясным и не многословным (идентификатор в разделе «Клиент» — это идентификатор клиента, и нет необходимости указывать его явно. ).
Поскольку Dapper сопоставляет столбец БД со свойством C# либо по имени параметра конструктора, либо по имени свойства, как это может быть сопоставлено Dapper автоматически или как лучше всего это сделать в dapper?
Даже я могу изменить имя столбца на уровне запроса SQL (ID на CUSTOMER_ID и т. д.), имя свойства класса C# не может быть изменено таким образом. Я пытался использовать System.ComponentModel.DataAnnotations.Schema.ColumnAttribute как с именем столбца в верхнем регистре (Oracle должен возвращать верхний регистр, но все равно пробовал оба), так и с именем столбца в нижнем регистре (

Код: Выделить всё

[Column(name: "CUSTOMER_ID")]
, [Столбец(имя: «customer_id»)]) и т. д.). Похоже, что Dapper не поддерживает System.ComponentModel.DataAnnotations.Schema.ColumnAttribute.
Любая помощь приветствуется.

Подробнее здесь: https://stackoverflow.com/questions/791 ... with-the-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»