Сегодня я задумался, а правильно ли я пишу, правильно ли я обращаюсь к БД?
ASP.NET Core
Язык: C#
БД: Postgresql
использую npgsql, Dapper
1) Создаю модель таблицы
public class Users
{
public int userid { get; set; }
public int orgid { get; set; }
public string login { get; set; }
public string pass { get; set; }
public string role { get; set; }
public string m_product_coming { get; set; }
public string m_product_realization { get; set; }
public string m_analytics { get; set; }
}
2) Создаю репозитори
public interface IUsersRepository<T> where T:BaseEntity
{
Task New(T add);
Task Delete(int id);
Task Update(T edit);
Task<IList<T>> ShowAll(int orgid);
}
public class ReposUsers:IUsersRepository<Users>
{
private string connectionString;
public ReposUsers(IConfiguration configuration)
{
connectionString = configuration.GetValue<string>("DBInfo:ConnectionString");
}
internal IDbConnection Connection
{
get
{
return new NpgsqlConnection(connectionString);
}
}
public async Task Delete(int id)
{
using(IDbConnection dbConnection = Connection)
{
await dbConnection.ExecuteAsync("DELETE FROM users WHERE userid=@userid", new { id = id });
dbConnection.Dispose();
}
}
public async Task New(Users add)
{
using(IDbConnection dbConnection = Connection)
{
await dbConnection.ExecuteAsync("INSERT INTO users " +
"(login,pass,role,m_product_coming,m_product_realization,m_analytics,orgid) VALUES " +
"(@login,@pass,@role,@m_product_coming,@m_product_realization,@m_analytics,@orgid)", add);
dbConnection.Dispose();
}
}
public async Task<IList<Users>> ShowAll(int orgid)
{
using(IDbConnection dbConnection = Connection)
{
var model = (await dbConnection.QueryAsync<Users>("SELECT * FROM users WHERE orgid=@orgid",new { orgid = orgid })).ToList();
dbConnection.Dispose();
return model;
}
}
public async Task Update(Users edit)
{
using (IDbConnection dbConnection = Connection)
{
await dbConnection.ExecuteAsync("UPDATE users SET" +
"login=@login,pass=@pass,role=@role,m_product_coming=@m_product_coming," +
"m_product_realization=@m_product_realization,m_analytics=@m_analytics WHERE userid=@userid", edit);
dbConnection.Dispose();
}
}
}
Вопрос:
Правильно ли я делаю?
Нет ли ошибок?
Как можно защититься от инъекции?
Например, в php экранировали вводимую пользователем форму например htmlspecialchars, надо ли на net core так же делать?