说明:
我正在尝试创建一个辅助方法,该方法使用dapper.contrib将任何类型的对象插入数据库。
这就是我所拥有的:
private void InsertObjectsIntoDatabase(IEnumerable<object> objs)
{
foreach (var obj in objs)
{
conn.Insert(obj, transaction: transaction);
}
}
这是我要插入的对象之一的示例:
[Table("Supplier")]
public class Supplier
{
[Key]
public int SupplierId { get; set; }
public string Name { get; set; }
public string Location { get; set; }
public string Price { get; set; }
}
(显然)我也有一个具有正确名称和数据类型的对应表。
问题:
运行代码时,我在conn.Insert
行遇到一个异常,说Incorrect syntax near ')'
。
我尝试过的事情:
我尝试过的另一种方法是:
private void InsertObjectsIntoDatabase<T>(IEnumerable<T> objs) where T:class
{
foreach (var obj in objs)
{
conn.Insert<T>(obj, transaction: transaction);
}
}
然后它不会生成异常,但是不会插入任何内容。它只是默默地失败了。
编辑:该事务稍后在代码中提交=)应该立即提到。
答案 0 :(得分:1)
由于signature是:
public static long Insert<T>(this IDbConnection connection,
T entityToInsert, IDbTransaction transaction = null, int? commandTimeout = null)
假设已定义transaction
,就足够了:
conn.Insert<T>(obj, transaction);
插入数据后,您可能必须基于标志来提交事务:
if (rollback)
transaction.Rollback();
else
transaction.Commit();
一个常见的模式是从一个工作单元开始您的事务,并在该对象的处置时执行提交。但这在很大程度上取决于其余的代码。
答案 1 :(得分:0)
据推测,这是一个非常愚蠢的错误。
我将错误类型的Object传递给了Insert-method。。感谢您的帮助,对不起,在发布之前找不到此对象