Skip to content
This repository was archived by the owner on Jun 4, 2020. It is now read-only.

GenericDatabaseAccess is an assembly on how to access databases in a generic way and using C#'s LINQ. The assembly was written and tested in .Net 4.8. This shouldn't be used any longer, check out the Dapper project, it will make things a lot easier.

License

Notifications You must be signed in to change notification settings

SeppPenner/GenericDatabaseAccess

Repository files navigation

GenericDatabaseAccess

GenericDatabaseAccess is an assembly on how to access databases in a generic way and using C#'s LINQ. The assembly was written and tested in .Net 4.8.

This shouldn't be used any longer, check out the Dapper project, it will make things a lot easier.

Build status GitHub issues GitHub forks GitHub stars License: MIT Known Vulnerabilities

Example initialization:

using System;
using System.Reflection;
using System.Windows.Forms;
using log4net;
using Languages.Implementation;
using Languages.Interfaces;
using GenericDatabaseAccess.Database.Generic;
using GenericDatabaseAccess.Exceptions;

namespace ExampleUsage
{
    public partial class Main : Form
    {
        private IDatabaseAdapter _databaseAdapter;
        private readonly ILanguageManager _lm = new LanguageManager();
        private readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        private ILanguage _lang;

        public Main()
        {
            InitializeComponent();
            InitializeLanguageManager();
            LoadLanguagesToCombo();
            InitDatabase();
        }

        private void InitDatabase()
        {
            try
            {
                _databaseAdapter = new DatabaseAdapter(_lang);
            }
            catch (Exception ex)
            {
                LogDatabaseInitializationException(ex);
            }
        }

        private void LogDatabaseInitializationException(Exception exception)
        {
            var ex = new InitializationException(_lang.GetWord("ErrorInDatabaseInit"), exception);
            LogError(ex);
        }

        private void InitializeLanguageManager()
        {
            _lm.SetCurrentLanguage("de-DE");
            _lm.OnLanguageChanged += OnLanguageChanged;
        }

        private void LoadLanguagesToCombo()
        {
            foreach (var lang in _lm.GetLanguages())
                comboBoxLanguage.Items.Add(lang.Name);
            comboBoxLanguage.SelectedIndex = 0;
        }

        private void ComboBoxLanguage_SelectedIndexChanged(object sender, EventArgs e)
        {
            _lm.SetCurrentLanguageFromName(comboBoxLanguage.SelectedItem.ToString());
        }

        private void OnLanguageChanged(object sender, EventArgs eventArgs)
        {
            _lang = _lm.GetCurrentLanguage();
            labelSelectLanguage.Text = _lang.GetWord("SelectLanguage");
            SetDatabaseAdapterLanguageIfNotNull();
        }

        private void SetDatabaseAdapterLanguageIfNotNull()
        {
            if (_lang == null || _databaseAdapter == null) return;
            _databaseAdapter.SetCurrentLanguage(_lang);
        }

        private void LogError(Exception ex)
        {
            _log.Error(ex);
            MessageBox.Show(ex.Message, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}

Example usage:

var merchant = _databaseAdapter.Get<Merchant>(x => !x.Deleted && x.Id == 1);
var merchants = _databaseAdapter.Get<Merchant, bool>(x => !x.Deleted);
var merchantCount = _databaseAdapter.Count<Merchant>();
var merchantCount2 = _databaseAdapter.Count<Merchant>(x => !x.Deleted);
var merchantToInsert = new Merchant();
var inserted = _databaseAdapter.Insert(merchantToInsert);
var merchantToUpdate = new Merchant();
var update = _databaseAdapter.Update(merchantToUpdate);
var deleted = _databaseAdapter.Delete(merchantToUpdate);
var sorted = _databaseAdapter.Get<Merchant, bool>(x => !x.Deleted, x.Name);

All available methods:

public interface IDatabaseAdapter
{
    void SetCurrentLanguage(ILanguage language);

    ILanguage GetCurrentLanguage();

    string GetDatabasePath();

    string GetConnectionString();

    void CreateBoughtTable();

    void CreateCompanyEndingsTable();

    void CreateCompanyNamesTable();

    void CreateDummyCompanyTable();

    void CreateMerchantTable();

    void CreateNamesTable();

    void CreateSoldTable();

    void CreateStockTable();

    void CreateStockHistoryTable();

    void CreateStockMarketTable();

    void CreateSurnamesTable();

    void CreateTaxesTable();

    void CreateAllTables();

    List<T> Get<T>();

    T Get<T>(long id);

    ObservableCollection<T> Get<T, TValue>(Expression<Func<T, bool>> predicate = null,
        Expression<Func<T, TValue>> orderBy = null);

    T Get<T>(Expression<Func<T, bool>> predicate);

    int Insert<T>(T entity);

    int Update<T>(T entity);

    int Delete<T>(T entity);

    int Insert<T>(List<T>entities);

    int Update<T>(List<T> entities);

    int Delete<T>(List<T> entities);

    int Count<T>(Expression<Func<T, bool>> predicate = null);
}

For more information see IDatabaseAdapter or DatabaseAdapter

Change history

  • Version 1.0.1.0 (2019-10-27) : Updated nuget packages, added GitVersionTask.
  • Version 1.0.0.4 (2019-05-07) : Updated .Net version to 4.8.
  • Version 1.0.0.3 (2018-05-21) : Added static database connection.
  • Version 1.0.0.2 (2018-03-12) : Updated ToCollection calls.
  • Version 1.0.0.1 (2017-08-16) : Smaller bugfixes.
  • Version 1.0.0.0 (2017-08-08) : 1.0 release.

About

GenericDatabaseAccess is an assembly on how to access databases in a generic way and using C#'s LINQ. The assembly was written and tested in .Net 4.8. This shouldn't be used any longer, check out the Dapper project, it will make things a lot easier.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages