Я разрабатываю приложение с использованием 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>
{
}