使用 dapper 插入存储过程(可能是 tvp)
using dapper to insert with stored procedure ( maybe tvp )
我有一个像这样的模型 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);
};
我可能在这里做错了很多事情,我可以使用 table valuded 参数,但我不知道它如何与 dapper 一起使用。
更新:
所以我想如果我不想在第一个中传递地址,我可以将它排除在第一个发送之外吗?我还是想一次传递整个模型而不是一个道具。
谢谢
问题是 dapper 无法告诉 - 使用存储过程 - 需要什么参数。有数据库 API 可以查询它,但一直这样做的成本非常高。对于常规查询,它可以很好地理解需要什么,但对于存储过程:它们是谜。因此,dapper 只是试图包含它可以看到的所有内容。
最好的选择是 "new" 投影,它可以选择参数所需的属性。
我有一个像这样的模型 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);
};
我可能在这里做错了很多事情,我可以使用 table valuded 参数,但我不知道它如何与 dapper 一起使用。
更新:
所以我想如果我不想在第一个中传递地址,我可以将它排除在第一个发送之外吗?我还是想一次传递整个模型而不是一个道具。
谢谢
问题是 dapper 无法告诉 - 使用存储过程 - 需要什么参数。有数据库 API 可以查询它,但一直这样做的成本非常高。对于常规查询,它可以很好地理解需要什么,但对于存储过程:它们是谜。因此,dapper 只是试图包含它可以看到的所有内容。
最好的选择是 "new" 投影,它可以选择参数所需的属性。