Как использовать Dapper с Dommel и FluentMap для вставки записи в таблицу, у которой нет ключа?
Я создаю службу в моей API , который использует щеголеватый с Dommel и FluentMap . База данных - это Microsoft SQL Server. У меня есть конечная точка, которой нужно вставить запись в таблицу, у которой нет ключа. Таблица описана следующим образом:
public class MyTable
{
public int SomeProperty{ get; set; }
public int AnotherProperty{ get; set; }
}
В этой таблице есть только эти два столбца в базе данных. Нет ключа.
Я хочу использовать Dapper с Dommel, если это возможно, чтобы вставить запись в эту таблицу.
Я уже создал карты и зарегистрировал их, все в порядке и работает для других таблиц, у которых есть ключ. Но этого нет.
Каждый раз, когда звонят Доммел
InsertAsync
метод, я получил это сообщение об ошибке:
сбой: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware Необработанное исключение произошло при выполнении запроса. System.InvalidOperationException: не удалось найти ключевые свойства для типа MyProject.Models.MyTable.
Уже известно, что можно использовать только Dapper и вручную создать SQL-запрос и 4выполнить его .
Спрашиваю, есть ли решение с Доммелом.
Заранее спасибо.
1 ответ
Вам нужно указать ключ. ORM требуются ключи, чтобы они знали, какую строку нужно вставить, удалить или обновить. ORM просто не может работать без ключей. Dommel - это не генератор SQL, он работает с Dapper, поэтому ему нужны ключи.
В любом случае у класса есть ключи - это таблица «многие ко многим» с составным ключом. Доммел признает
Key
атрибут, который можно использовать для указания составных ключей.
В модульном тесте Dommel класс ProductsCategories используется для представления отношения «многие ко многим» с составным ключом:
public class ProductsCategories
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ProductId { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CategoryId { get; set; }
}