dapper.contrib插入对象')'

时间:2018-12-04 07:17:16

标签: c# dapper dapper-contrib

说明:

我正在尝试创建一个辅助方法,该方法使用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);
    }
}

然后它不会生成异常,但是不会插入任何内容。它只是默默地失败了。

编辑:该事务稍后在代码中提交=)应该立即提到。

2 个答案:

答案 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。。感谢您的帮助,对不起,在发布之前找不到此对象