带有dapper包的asp.net核心中的多行插入

时间:2019-06-25 06:37:11

标签: asp.net-core dapper

我想在使用dapper包的asp.net核心中执行多行插入。在这里,我使用模型类,控制器和另一个类。存储在数据库中的结果是从列表转换而来的数据表。在这里,我使用具有类型的存储过程。

public class PlanDetailsInputModel
{
    public int MembershipPlanDetailsId { get; set; }
    public int MembershipPlanId { get; set; }
    public int CreatedBy { get; set; }
    public string Flag { get; set; }
    public List<dtPlanFeatureListModel> dtPricePlanDetails { get; set; }
}

public class dtPlanFeatureListModel
{
    public long PricePlanFeatureId { get; set; }
}

这是我的模型课。帮我创建控制器和函数。

1 个答案:

答案 0 :(得分:0)

如果您有插入语句和与插入语句的字段匹配的对象列表,则可以执行以下操作。

public void UpdateDB()
{
    List<Entity> entities = null;

    entities = GetData();

    var sql = @"INSERT INTO TABLE_01 ( Id, FieldA, FieldB ) VALUES ( @id, @FieldA, @Fieldb )";

    using (var conn = (IDbConnection) GetDatabaseConnection())
    {
        if (conn.State == System.Data.ConnectionState.Closed)
            conn.Open();

        using (var tx = conn.BeginTransaction())
        {
            //conn.Execute
            conn.Execute(sql, entities, tx);
            tx.Commit();
        }
    }

}

上面的代码将遍历实体中的所有行并执行insert语句。如果您忽略该事务,则它将在每次插入后提交。但是您包括了事务,它将在插入所有行之后提交。

您可以找到有关here的更多信息

尽管,您的问题并未说明将插入哪个类。我认为Dapper不能使用其中的List来处理您的PlanPlansInputModel类。您将不得不将其展平为DTO类,并在Dapper命令中使用该DTO类,或者使用两个dapper插入命令。一个用于PlanDetailsInputModel,另一个用于dtPlanFeatureListModel的列表。

HTH