你能指点一个通过sproc用Dapper创建db记录的好例子吗?理想情况下,我会采用类似于EF的OO方法:
var user = new User{ FirstName="John", LastName="Smith"}
var userId = dapper.Create(User);
return userId;
当然,我对#34;右边"如果dapper建议采用不同的方法,那么在短小精悍中这样做的方法
答案 0 :(得分:0)
假设您有一个存储过程将记录添加到User表,如
CREATE PROCEDURE SaveUser(@firstName VARCHAR(10),@lastName VARCHAR(10))
AS
BEGIN
INSERT INTO [User] (FirstName,LastName) VALUES (@firstName ,@lastName);
SELECT SCOPE_IDENTITY()
END
假设您的User表将Id列(PK)设置为Identity。 现在,您可以像这样执行存储过程
var conStr="Replace your connection string here";
using (var con = new SqlConnection(conStr))
{
var userId = con.Query<int>("SaveUser",
new {@firstName = "John", @lastName = "Smith"},
commandType: CommandType.StoredProcedure
).First();
}
如果您有一个表示User表记录的类,则可以在调用存储过程时传递该类对象。
public class UserDto
{
public string FirstName { set;get;}
public string LastName { set;get;}
}
并简单地传递此对象!
var conStr="Replace your connection string here";
var u = new UserDto { FirstName = "Johny", LastName= "Depp" };
using (var con = new SqlConnection(conStr))
{
var userId = con.Query<int>("SaveUser", u, commandType: CommandType.StoredProcedure)
.First();
}
答案 1 :(得分:0)
你可能还想看一下Drapper(建立在Dapper之上),它可以让你做这样的事情。
// instance of user created somewhere & procedure called
// on repository method.
var user = new User { FirstName = "John", LastName = "Smith" };
_commander.Execute(user) ? user : null;
假设您正在使用某种类型的存储库类。我已经冒昧地充实了更多的代码,添加了一些构造函数注入爱。
public class UserRepository : IUserRepository
{
// the IDbCommander is a Drapper construct
private readonly IDbCommander _commander;
public UserRepository(IDbCommander commander)
{
_commander = commander;
}
public User Create(User user)
{
// execute your procedure here (looked up in config)
return _commander.Execute(user) ? user : null;
}
public IEnumerable<User> RetrieveAll()
{
return _commander.Query<User>();
}
}
然后,您的SQL代码将保存在单独的文件(json或xml config)中。
这样可以使您的C#与SQL分离,从长远来看,使您的生活变得更轻松 - 对SQL的更改不会涉及重新编译代码,您的存储库类变得更易于测试等等。
{
"Namespaces": [
{
"Namespace": "Company.Product.Namespace",
"ConnectionString": {
"ProviderName": "System.Data.SqlClient",
"ConnectionString": "Data Source=(LocalDb)\\mssqllocaldb;Initial Catalog=DrapperTests;Integrated Security=true"
},
"Types": [
{
"Name": "Company.Product.Namespace.UserRepository",
"Commands": {
"Create": {
"CommandText": "[dbo].[usp_CreateUser]",
"CommandType": 4
},
"RetrieveAll": {
"CommandText": "select * from [User];",
"CommandType": 1
}
}
}
]
}
]
}