无法将对象传递给Dapper.SimpleCrud插入

时间:2018-12-08 08:42:28

标签: c# dapper dapper-simplecrud

我正在将Dapper与Dapper.SimpleCrud扩展一起使用。

在我的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时,它将起作用。 Dapper.SimpleCrud的Insert重载方法显然无法确定它是哪个对象。你知道如何解决吗?

1 个答案:

答案 0 :(得分:1)

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

  

数据库中任何类型的对象

SimpleCRUD如何知道您发送的object是“在数据库中的类型”?

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

  

当我将自己的Insert方法更改为采用Menu对象而不是常规对象时,它将起作用。

这证实了我的早期诊断。

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

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

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

或与您其他代码结构类似的内容。