Не удается передать объект на вставку Dapper.SimpleCrud - PullRequest
0 голосов
/ 08 декабря 2018

Я использую Dapper с расширением Dapper.SimpleCrud.

В своем классе Dapper я сделал абстракцию метода вставки, например:

public static int Insert(object entity) {
    try {
        using (SqlConnection sqlConnection = new SqlConnection(connectionString)) {
            sqlConnection.Open();
            return sqlConnection.Insert(entity) ?? -1;
        }
    }
    catch(Exception ex) {
        // log
        return -1;
    }
}

Это позволяет мневызовите вставку и передайте объект любого типа, который находится в БД.Код, который в данный момент вызывает этот метод, выглядит следующим образом:

DapperORM.Insert(new Menu {
                    RestaurantID = RestaurantID,
                    Name = Name});

Это выдает ошибку: {"Incorrect syntax near ')'."} Хорошо, теперь я думаю, что есть что-то странное с данными, которые я передаю, или что-то в этом роде.Но нет. Когда я изменяю свой собственный метод Insert для получения Menu -объекта вместо общего object, он работает. Метод перегрузки Dapper.SimpleCrud Insert, очевидно, не может определить, какой это объект.Вы знаете, как это исправить?

1 Ответ

0 голосов
/ 08 декабря 2018

Вы смотрели на сгенерированный SQL?В трассировке стека может быть?Я думаю, это должно быть пропущено имя таблицы базы данных.Да; Я думаю, .Потому что я никогда не использовал SimpleCRUD.

объект любого типа, который находится в db

Как SimpleCRUD знает, что отправляемый вами object тип ", который находится в db"?

Я думаю, что параметр типа object является проблемой.Чтобы принять «объект любого типа , который находится в db », вы должны рассмотреть возможность преобразования вашего метода в универсальный тип вместо object.

Когда я изменяю свой собственныйВставьте метод, чтобы взять объект Menu вместо общего объекта, он работает.

Это подтверждает мой предыдущий диагноз.

Преобразуйте ваш метод в что-то какниже:

public static int Insert<TPoco>(TPoco entity) where TPoco : class

или

public static int Insert<TPoco>(TPoco entity) where TPoco : BasePoco

или аналогичные согласно вашей другой структуре кода.

...