无法将对象传递给 Dapper.SimpleCrud 插入
Cannot pass object to Dapper.SimpleCrud insert
我正在使用带有 Dapper.SimpleCrud 扩展名的 Dapper。
在我的Dapper class中,我对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;
}
}
这让我可以调用插入并传递数据库中任何类型的对象。
当前调用此方法的代码如下所示:
DapperORM.Insert(new Menu {
RestaurantID = RestaurantID,
Name = Name});
这会引发错误:{"Incorrect syntax near ')'."}
好的,现在我觉得我传入的数据有些奇怪。但不是。 当我更改自己的 Insert 方法以采用 Menu
对象而不是一般 object
时,它起作用了。
Dapper.SimpleCrud Insert重载方法显然搞不清楚是哪个对象。你知道怎么解决吗?
你看过生成的 SQL 了吗?在堆栈跟踪中可能是?我想它一定是缺少数据库名称 table。是的; 我猜。因为我没用过SimpleCRUD。
an object of any type that is in the db
SimpleCRUD怎么知道你发送的object
是"of type that is in the db"?
我认为 object
类型参数有问题。要接受 "an object of any type that is in the db",您应该考虑将您的方法转换为使用泛型类型而不是 object
。
When I change my own Insert method to take a Menu-object instead of a general object, it works.
这证实了我之前的诊断。
将您的方法转换为某种东西,如下所示:
public static int Insert<TPoco>(TPoco entity) where TPoco : class
或
public static int Insert<TPoco>(TPoco entity) where TPoco : BasePoco
或与您的其他代码结构类似。
我正在使用带有 Dapper.SimpleCrud 扩展名的 Dapper。
在我的Dapper class中,我对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;
}
}
这让我可以调用插入并传递数据库中任何类型的对象。 当前调用此方法的代码如下所示:
DapperORM.Insert(new Menu {
RestaurantID = RestaurantID,
Name = Name});
这会引发错误:{"Incorrect syntax near ')'."}
好的,现在我觉得我传入的数据有些奇怪。但不是。 当我更改自己的 Insert 方法以采用 Menu
对象而不是一般 object
时,它起作用了。
Dapper.SimpleCrud Insert重载方法显然搞不清楚是哪个对象。你知道怎么解决吗?
你看过生成的 SQL 了吗?在堆栈跟踪中可能是?我想它一定是缺少数据库名称 table。是的; 我猜。因为我没用过SimpleCRUD。
an object of any type that is in the db
SimpleCRUD怎么知道你发送的object
是"of type that is in the db"?
我认为 object
类型参数有问题。要接受 "an object of any type that is in the db",您应该考虑将您的方法转换为使用泛型类型而不是 object
。
When I change my own Insert method to take a Menu-object instead of a general object, it works.
这证实了我之前的诊断。
将您的方法转换为某种东西,如下所示:
public static int Insert<TPoco>(TPoco entity) where TPoco : class
或
public static int Insert<TPoco>(TPoco entity) where TPoco : BasePoco
或与您的其他代码结构类似。