1

我正在使用带有 Dapper.SimpleCrud 扩展的 Dapper。

在我的 Dapper 类中,我对 insert 方法进行了抽象,如下所示:

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;
    }
}

这让我可以调用 insert 并传递数据库中任何类型的对象。当前调用此方法的代码如下所示:

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

这会引发一个错误:{"Incorrect syntax near ')'."} 好的,所以现在我认为我传入的数据或其他东西有些奇怪。但不是。当我将自己的 Insert 方法更改为采用Menu-object 而不是 generalobject时,它可以工作。 Dapper.SimpleCrud Insert 重载方法显然无法确定它是哪个对象。你知道如何解决吗?

4

1 回答 1

1

你看过生成的 SQL 吗?在堆栈跟踪可能是?我想它一定是缺少数据库表的名称。是的; 我猜。因为我从未使用过 SimpleCRUD。

数据库中任何类型的对象

SimpleCRUD 怎么知道object你发送的是“数据库中的类型”?

我认为object类型参数是问题所在。要接受“数据库中任何类型的对象”,您应该考虑将您的方法转换为使用泛型类型而不是object.

当我将自己的 Insert 方法更改为采用菜单对象而不是通用对象时,它可以工作。

这证实了我之前的诊断。

将您的方法转换为如下所示:

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

或者

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

或根据您的其他代码结构类似。

于 2018-12-08T10:15:16.593 回答