使用dapper插入存储过程(可能是tvp)

问题描述 投票:1回答:1

我有一个类似PersonalInfo的模型:

public string FirstName { get; set;}
public string LastName { get; set;}
public string Email { get; set; }
public IEnumerable<Addresses> Addresses{ get; set; }

并且我的地址模型包括以下内容:

public int AddressId { get; set; }
public string StreedAddress { get; set; }
public string State { get; set; }

我需要使用存储过程将它们插入数据库,但是我需要使用dapper来做到这一点。抱歉,我是新手。我尝试了以下类似操作,但它不起作用:

  var Id =  connection.Execute("usp_Insert", personalInfo, commandType: CommandType.StoredProcedure);
    foreach (Addresses address in personalInfo.Addresses){
        connection.Execute("Insert", new {address, Id}, null, commandType: CommandType.StoredProcedure);
        };

我可能在这里做错了很多事情,我可以使用表值参数,但是我不知道它如何与dapper一起工作。

更新:

因此,我想如果我不想在第一个地址中传递地址,我可以将其排除在优先位置之外吗?我仍然想一次通过整个模型而不是一个道具。

谢谢

dapper dapper-fluentmap
1个回答
2
投票

问题是,dapper无法通过存储过程知道需要哪些参数。有数据库API可以对此进行查询,但是一直以来这样做都是非常昂贵的。对于常规查询,它可以充分理解所需的内容,但是对于存储过程:这是个谜。因此,dapper只会尝试包含它可以看到的所有内容。

您最好的选择是一个“新”投影,该投影将选择参数所需的属性。

© www.soinside.com 2019 - 2024. All rights reserved.