我正在将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重载方法显然无法确定它是哪个对象。你知道如何解决吗?
答案 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
或与您其他代码结构类似的内容。