Xamarin最流行的SQLite ORM,
SQLite-net
,是线程安全的,并为您处理数据库连接。
我更喜欢使用类似的方法构造数据库
BaseDatabase
检索连接的类。
基本数据库
笔记
基本数据库
Xamarin.Essentials
NuGet Package
定位应用程序的数据目录。确保首先添加Xamarin。Essentials NuGet软件包并遵循
Getting Started Instructions
using System.Threading.Tasks;
using SQLite;
using Xamarin.Essentials;
using Xamarin.Forms;
namespace MyNamespace
{
public abstract class BaseDatabase
{
static readonly string _databasePath = Path.Combine(FileSystem.AppDataDirectory, "SqliteDatabase.db3");
static readonly Lazy<SQLiteAsyncConnection> _databaseConnectionHolder = new Lazy<SQLiteAsyncConnection>(() => new SQLiteAsyncConnection(_databasePath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.SharedCache));
SQLiteAsyncConnection DatabaseConnection => _databaseConnectionHolder.Value;
protected static async Task<SQLiteAsyncConnection> GetDatabaseConnection<T>()
{
if (!DatabaseConnection.TableMappings.Any(x => x.MappedType.Name == typeof(T).Name))
{
// On sqlite-net v1.6.0+, enabling write-ahead logging allows for faster database execution
// await DatabaseConnection.EnableWriteAheadLoggingAsync().ConfigureAwait(false);
await DatabaseConnection.CreateTablesAsync(CreateFlags.None, typeof(T)).ConfigureAwait(false);
}
return DatabaseConnection;
}
}
}
数据库
namespace MyNamespace
{
public class OpportunityModelDatabase : BaseDatabase
{
public async Task<List<OpportunityModel>> GetAllOpportunityDataAsync()
{
var databaseConnection = await GetDatabaseConnection<OpportunityModel>().ConfigureAwait(false);
return await databaseConnection.Table<OpportunityModel>().ToListAsync().ConfigureAwait(false);
}
}
}