Dapper - 使用嵌套对象插入

时间:2016-07-14 12:09:42

标签: c# insert dapper

我有一个类User,其中包含嵌套类Bank

class User{
        int Id;
        string username;
        Bank bank;

    }

    Class Bank{
        int id;
        string name;
    }

我需要为User创建一个Insert函数。在Dapper中是否有办法执行查询并从嵌套的对象中绑定参数?

2 个答案:

答案 0 :(得分:3)

您可以使用 DapperExtensions Dapper 编写自定义映射器:

public sealed class UserMapper : ClassMapper<User>
{
    public UserMapper()
    {
        Map(x => x.bank.id).Column("BankId");
        Map(x => x.bank.name).Column("BankName");

        AutoMap();
    }
}

https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html#tgit-dug-settings-hooks

确保注册包含映射器的程序集:

DapperExtensions.SetMappingAssemblies(new[] { typeof(UserMapper).Assembly });

答案 1 :(得分:1)

对于不仅User个对象而且List<User>可能还需要数据库插入的情况,您可以考虑使用table valued parameters。对于你的问题,它将是:

  • 使用IEnumerable<User>IEnumerable<Bank>,即使它只是一个对象

  • 使TVP具有适当的架构,并且与columns中的IEnumerable collection订单相同,用于存储过程,否则会导致错误

  • 您可以使用dynamic parameters来绑定参数,如果您使用{TVP,可以使用扩展方法IEnumerable提供AsTableValuedParameters的参数1}}参数不是anonymous type,然后使用Nuget中dynamic parameters的{​​{1}}将ObjectReader转换为FastMember,这对于TVP是强制性的。即使自定义代码也可用于IEnuemrable<T>Datatable转换,如果需要省略几列,请参阅以下代码段:

IEnuemrable<T>