Я бы отказался от использования глобального состояния. Если вам действительно нужен один экземпляр, то создавайте его явно в корне приложения и переиспользуйте или доверьте эту обязанность IoC контейнеру.
Реализация без глобальных переменных:
public abstract class ActiveRecordEntity
{
protected int Id { get; set; }
public readonly string TableName;
public DataTable DataTable { get; }
public ActiveRecordEntity(string tableName, SQLiteConnection connection)
{
TableName = tableName;
DataTable = new DataTable { Locale = CultureInfo.InvariantCulture };
var dataAdapter = new SQLiteDataAdapter
{
SelectCommand = new SQLiteCommand($"SELECT * FROM {TableName}", connection)
};
dataAdapter.Fill(DataTable);
}
}
public class Category : ActiveRecordEntity
{
public string Title { get; set; }
public Category(SQLiteConnection connection) : base("category", connection)
{
}
}