Общий CRUD с Sqlite-net Xamarin C#

Я разрабатываю приложение с использованием Xamarin.Android на С# и использую Sqlite-net для управления базой данных, а пока я использую класс модели (животное) для определения полей таблицы:

[Table("Animais")]
public class Animal
{
    [PrimaryKey, MaxLength(20)]
    public long AnimalId { get; set; }

    [MaxLength(100)]
    public string AnimalName {get; set; }
}

И я использую это, чтобы выбрать всех животных в базе данных:

public List<Animal> SelectAll()
{
    try
    {
        using (var conn = new SQLiteConnection(System.IO.Path.Combine(Database.PATH, Database.DB_NAME)))
        {
            return conn.Table<Animal>().ToList();
        }
    }
    catch (SQLiteException ex)
    {
        Log.Info(TAG, "Houve um erro ao listar os animais: " + ex.Message);
        return new List<Animal>();
    }
}

Но у меня есть много других таблиц в моей базе данных, и я не хочу создавать один метод для каждого выбора, вставки или обновления для каждой таблицы, что я могу сделать, чтобы создать общий SelectAll(), где я могу передать любую модель для запроса? Для операций вставки и обновления я использую тип объекта, я не знаю, лучший ли это подход, но вот он:

public bool Insert(object b)
{
    try
    {
        using (var conn = new SQLiteConnection(System.IO.Path.Combine(Database.PATH, Database.DB_NAME)))
        {
            conn.Insert(b);
            return true;
        }
    }
    catch (SQLiteException ex)
    {
        Log.Info(TAG, "Houve um erro ao adicionar um novo registro no banco de dados: " + ex.Message);
        return false;
    }
}

Можете ли вы, ребята, помочь мне с этим? Буду очень рад улучшениям, так как я новичок в C#... Большое спасибо!

РЕДАКТИРОВАНИЕ РЕШЕНИЯ:

Base class
class BaseDao<T> where T : new()
{
    public bool Insert(T entity)
    {
        try
        {
            using (var conn = new SQLiteConnection(System.IO.Path.Combine(Database.PATH, Database.DB_NAME)))
            {
                conn.Insert(entity);
                return true;
            }
        }
        catch (SQLiteException ex)
        {
            Log.Info(TAG, "Houve um erro ao adicionar um novo registro no banco de dados: " + ex.Message);
            return false;
        }
    }

    public List<T> SelectAll()
    {
        try
        {
            using (var conn = new SQLiteConnection(System.IO.Path.Combine(Database.PATH, Database.DB_NAME)))
            {
                return conn.Table<T>().ToList();
            }
        }
        catch (SQLiteException ex)
        {
            Log.Info(TAG, "Houve um erro ao listar os registros: " + ex.Message);
            return new List<T>();
        }
    }
}

Child class:

class AnimalDao : BaseDao<Animal>
{

}

person user3159043    schedule 11.01.2017    source источник
comment
я бы использовал Dapper в качестве ORM: github.com/StackExchange/dapper-dot-net Многое из желаемого уже создано. Нет смысла заново изобретать велосипед.   -  person Waragi    schedule 11.01.2017
comment
Я очень ограничен в использовании этого способа, так как это не мой собственный проект :(, но спасибо за предложение! :D   -  person user3159043    schedule 11.01.2017
comment
Это здорово! Я внес некоторые изменения и внес изменения, не могли бы вы проверить, правильно ли это? Спасибо, мой друг!   -  person user3159043    schedule 11.01.2017
comment
Где находится метод редактирования? Я этого не вижу.   -  person Waragi    schedule 11.01.2017
comment
Я сделал редактирование по этой теме с примером класса BaseDao и Child.   -  person user3159043    schedule 11.01.2017