Как вставить / обновить сущность, когда тип сущности неизвестен во время компиляции? - PullRequest
0 голосов
/ 10 апреля 2020

Dapper.FastCrud использует типовой аргумент c для методов Insert / Update. Это хорошо работает, когда типы сущностей известны во время компиляции. Однако, когда типы сущностей не известны во время компиляции, кажется, нет никакого способа использовать Dapper.FastCrud для Insert / Update этих сущностей. Например:

object person = new PersonEntity();
connnection.Insert(person);

Это не работает, несмотря на то, что сопоставления PersonEntity зарегистрированы в OrmConfiguration.

Есть какие-либо идеи о том, как включить такой сценарий ios? Существуют ли какие-либо неуниверсальные версии c, доступные для Insert / Update методов?

1 Ответ

0 голосов
/ 13 апреля 2020

Расширения Dapper (или вообще любой ORM) поддерживают генерацию автоматического запроса. Для этого им нужно знать имя таблицы, по которой должен быть сгенерирован запрос. Они узнают об этом, посмотрев тип сущности generic c и связав ее с выполненным отображением.

Вы пытаетесь вставить тип object. ORM не может узнать, для какой таблицы должен быть сгенерирован запрос. Вот почему то, что вы пытаетесь сделать, невозможно.

Это не работает, несмотря на то, что PersonEntity сопоставления зарегистрированы с OrmConfiguration

Опять же, ORM не может знать, что ваш object равен PersonEntity. Вы нанесли на карту PersonEntity и передали object.

Чтобы это произошло, разыграйте object с точной сущностью:

connnection.Insert(person as PersonEntity);

Пока Insert, ваш код знаю, что вы вставляете. Простое приведение к указанному типу c должно решить проблему.

Как уже упоминалось в документе , вы можете использовать SQL Компоновщик в инструменте. Я никогда не использовал инструментарий, поэтому я не знаю, поможет ли это вам; просто предлагаю посмотреть документацию.

Полезный SQL построитель и средство форматирования операторов, которое можно использовать, даже если вам не нужны функции CRUD этой библиотеки.

...