Witam.
W związku z tym, że piszę pod Comarch Optima, muszę wymyślać różnego rodzaju obejścia na ułatwienie sobie przyszłej pracy i rozbudowywania projektu z jednoczesnym zachowaniem wydajności tego systemu. Używam Dappera. Nie korzystam z EF, bo nie ma "custom query", a też, najważniejsze, korzystam z gotowej bazy oraz inserty robię przez .dll samej Optimy, więc po co EF...
Próbuje zrobić coś na wzór EF. Główny dbContext i konkretne "tabelki" oraz ich podstawowe opcje (add, edit, delete, get, getsingle).
public interface IDatabaseContext
{
public AttributesEntity Attributes { get; set; }
}
public class DatabaseContext : IDatabaseContext
{
private readonly IDbConnectionFactory _dbConnectionFactory;
private readonly IHttpContextAccessor _httpContextAccessor;
public DatabaseContext(IDbConnectionFactory dbConnectionFactory, IHttpContextAccessor httpContextAccessor)
{
_dbConnectionFactory = dbConnectionFactory;
_httpContextAccessor = httpContextAccessor;
}
public AttributesEntity Attributes { get; set; }
}
Tabelka atrybutów
public interface IAttributesEntity
{
Task<IEnumerable<DefAttribute>> Get(string query, object param);
Task<DefAttribute> GetSingle(string query, object param);
int Add(DefAttribute attribute);
bool Update(DefAttribute attribute);
bool Delete(DefAttribute attribute);
}
Takich tabelek oczywiście będzie/jest masa. Na tę chwilę mam ich 9, w których potrzebuje obsłużyć podstawowe operacje. Zauważyłem, że to nie bardzo pomaga mi w klepaniu tego samego i muszę do każdej tabelki dopisywać DI z IDbConnectionFactory
oraz IHttpContextAccessor
. Da się ogarnąć to tak, aby IAttributesEntity
miało dostęp do tych dwóch?
PS.
Z IHttpContextAccessor
pobieram claims na temat wybranej firmy (bazy danych). Można mieć kilka firm/baz w Optimie + osobno baza konfiguracyjna, w której są użytkownicy i ich ustawienia.
Z IDbConnectionFactory
tworze połączenie do odpowiedniej bazy (firma, konfiguracja) i przekazuje do Dappera.