我正在尝试使用Dapper构建通用存储库,但是在实现CRUD操作方面遇到了一些困难。
以下是存储库的一些代码:
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
internal IDbConnection Connection
{
get
{
return new SqlConnection(ConfigurationManager.ConnectionStrings["SoundyDB"].ConnectionString);
}
}
public GenericRepository(string tableName)
{
_tableName = tableName;
}
public void Delete(TEntity entity)
{
using (IDbConnection cn = Connection)
{
cn.Open();
cn.Execute("DELETE FROM " + _tableName + " WHERE Id=@ID", new { ID = entity.Id });
}
}
}
如您所见,我的删除方法接受一个TEntity作为参数,这是一个类类型的参数。
我从我的UserRepository中这样调用我的Delete方法:
public class UserRepository : GenericRepository<User>, IUserRepository
{
private readonly IConnectionFactory _connectionFactory;
public UserRepository(IConnectionFactory connectionFactory) : base("User")
{
_connectionFactory = connectionFactory;
}
public async Task<User> Delete(User model)
{
var result = await Delete(model);
return result;
}
}
问题是我无法在通用存储库的删除操作中编写entity.Id
。我收到一个错误。那么,我该如何轻松地实现像这样的CRUD操作?
这里是错误消息:
TEntity不包含"Id"的定义,也找不到接受"TEntity"类型参数的"Id"扩展方法。
Id
的公共属性,其类型为int
吗? - Igor