我目前正在关注此guide以了解Dapper micro ORM和ASP.NET身份。我想通过实现一个通用的存储库模式来混合它,这将有助于我进行基本的CRUD操作。
以下是我的课程:
User.cs
public class User : IUser
{
public Guid UserId { get; set; }
public string UserName { get; set; }
public string PasswordHash { get; set; }
public string SecurityStamp { get; set; }
string IUser<string>.Id
{
get { return UserId.ToString(); }
}
}
Repository.cs
public class Repository<T> : IRepository<T> where T : class
{
public int ExecuteScalar(string query, object arguments)
{
var id = 0;
using (var connection = ConnectionFactory.CreateConnection())
{
id = connection.ExecuteScalar<int>(query, arguments, commandType: CommandType.StoredProcedure);
}
return id;
}
}
UserStore.cs
public class UserStore : IUserStore<User>, IUserLoginStore<User>, IUserPasswordStore<User>, IUserSecurityStampStore<User>
{
private IRepository<User> repository;
public UserStore(IRepository<User> repository)
{
this.repository = repository;
}
#region IUserStore
public virtual Task CreateAsync(User user)
{
if (user == null)
throw new ArgumentNullException("user");
return Task.Factory.StartNew(() =>
{
user.UserId = Guid.NewGuid();
repository.ExecuteScalar("sp_InsertUser",
new { UserId = user.UserId, UserName = user.UserName, Password = user.PasswordHash,
SecurityStamp = user.SecurityStamp });
});
}
}
我没有提供其他方法和类只是为了使我的帖子更短:连接工厂将创建SQL连接也是UserStore
中接口的方法部分。
我有以下问题:
User
对象原样传递给ExecuteScalar
方法?而不是每次都输入所有参数。sp_InsertUser
。如果我想编写SQL查询并将其传递给Dapper(将查询添加到XML文件并从那里读取)。我也看到了这个guide,我喜欢这样的事实:一切都是通用的,我可以最小化我的代码并创造一些整洁的东西。调用字符串格式和传递参数是最佳做法吗?
string.Format(“UPDATE [{0}] SET {1} WHERE {2}“,typeof(T).Name,sqlValuePairs,sqlIdPairs)
我为这篇长篇文章道歉,但我真的很陌生,我正在努力学习这些技术。但是我搜索的文章越多,我就越困惑。
答案 0 :(得分:1)
user
;但请注意,虽然dapper可以尝试检查内联文本需要哪些参数,但它不能对存储过程执行此操作,因此它会尝试发送所有内容编辑后的4: