- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要为 Windows 8 应用程序实现完全异步架构,我在数据层中使用 SQLite For winRT 和 SQLite.Net。
到目前为止我做了什么:
DAL
上下文:
public interface IContext
{
Task InitializeDatabase();
SQLiteAsyncConnection GetAsyncConnection();
}
public class SQLiteAsyncContext : IContext
{
private SQLiteAsyncConnection _context;
private String _dBPath;
public SQLiteAsyncContext()
{
this._dBPath = Path.Combine(
Windows.Storage.ApplicationData.Current.LocalFolder.Path, "DBName");
this._context = new SQLiteAsyncConnection(_dBPath);
}
public async Task InitializeDatabase()
{
await _context.CreateTableAsync<User>();
}
public SQLiteAsyncConnection GetAsyncConnection()
{
return _context;
}
}
通用存储库:
public interface IAsyncRepository<T> where T : class
{
Task<int> AddAsync(T entity);
Task<int> UpdateAsync(T entity);
Task<int> RemoveAsync(T entity);
Task<IList<T>> GetAllAsync();
Task<IList<T>> GetBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate);
Task SaveChanges();
}
public class AsyncRepository<T> : IAsyncRepository<T> where T : class, new()
{
private SQLiteAsyncConnection _context;
public AsyncRepository(IContext _context)
{
this._context = _context.GetAsyncConnection();
}
public async Task<int> AddAsync(T entity)
{
return await _context.InsertAsync(entity);
}
public async Task<int> UpdateAsync(T entity)
{
return await _context.UpdateAsync(entity);
}
public async Task<int> RemoveAsync(T entity)
{
return await _context.DeleteAsync(entity);
}
public async Task<IList<T>> GetAllAsync()
{
return await _context.Table<T>().ToListAsync();
}
public async Task<IList<T>> GetBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
return await _context.Table<T>().Where(predicate).ToListAsync();
}
public Task SaveChanges()
{
throw new NotImplementedException();
}
}
BL
public interface IAsyncServices<T> where T : class
{
Task<int> AddAsync(T entity);
Task<int> UpdateAsync(T entity);
Task<int> RemoveAsync(T entity);
Task<IList<T>> GetAllAsync();
Task<IList<T>> GetBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate);
}
public class AsyncUserService : IAsyncServices<User>
{
private readonly IAsyncRepository<User> _asyncUserRepository;
public AsyncUserService(IAsyncRepository<User> _asyncUserRepository)
{
this._asyncUserRepository = _asyncUserRepository;
}
public async Task<int> AddAsync(User entity)
{
return await _asyncUserRepository.AddAsync(entity);
}
public async Task<int> UpdateAsync(User entity)
{
return await _asyncUserRepository.UpdateAsync(entity);
}
public async Task<int> RemoveAsync(User entity)
{
return await _asyncUserRepository.RemoveAsync(entity);
}
public async Task<IList<User>> GetAllAsync()
{
return await _asyncUserRepository.GetAllAsync();
}
public async Task<IList<User>> GetBy(Expression<Func<User, bool>> predicate)
{
return await _asyncUserRepository.GetBy(predicate);
}
}
我有一些问题:
提前致谢。
最佳答案
Is it possible to implement UnitOfWork pattern With SQliteAsyncConnection.
我想这在很大程度上取决于您的业务任务。你不能仅仅发明神奇地覆盖所有可能情况的抽象架构。异步数据处理本身并不是玩具。结合数据库,它很快就会变成难以管理的代码困惑。
How To perform Commit & RollBack within Repository.
好吧,首先您需要使用某种锁定机制来停止对 Repository 的访问。然后您需要等到所有异步操作完成。然后你提交/回滚并解锁。这当然是通用的,可能不适合您的工作流程。
Anything i should Improve ?
你告诉 ;)
实际上,我强烈建议不要使用通用的异步数据库访问。仅当您确实需要异步数据库操作时才使用异步数据库操作。通过主键获取一条记录不需要是异步的。它的速度足够快。
关于c# - 将 SQliteAsyncConnection 与 UnitOfWork 和存储库模式结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34065487/
我在我的 Xamarin Android 项目中使用 sqlite-net-pcl 库( the one by Frank Krueger ,而不是 this fork by Øystein Krog
我正在尝试使用 SQLite.net 在我的 PCL 中实现 OneToMany 关系。我有异步扩展包(SQLiteNetExtensions.Async),并且我的代码基于 https://bitb
第一次使用SQLite,选择了SQLite.net-pcl , 我有一个 PCL 库,我从我的 UWP 应用程序使用它,我的 PCL 库有 DBContext 类: public NewspaperD
我指的是 http://timheuer.com/blog/archive/2012/08/07/updated-how-to-using-sqlite-from-windows-store-apps
我需要为 Windows 8 应用程序实现完全异步架构,我在数据层中使用 SQLite For winRT 和 SQLite.Net。 到目前为止我做了什么: DAL 上下文: public inte
我正在尝试从通过 Xamarin.forms 的 nuget 包 sqlite-net-pcl(1.5.166-beta) 访问的 sqlite 数据库表中删除所有项目。 方法DeleteAllAsy
我正在尝试使用 Visual Studio 在 Xamarin 解决方案中实现 SQLite。但是,我找不到实现 SQLiteAsyncConnection 的正确方法。 我正在学习一个教程,该教程只
我正在使用来自 https://github.com/oysteinkrog/SQLite.Net-PCL 的 Sqlite.net 的 PCL 版本 但是,我无法设置数据库连接。 SQliteAsy
我尝试使用以下代码,但它不起作用。 public void deleteRow(int index) { conn.QueryAsync("D
我正在使用 SQLite-net ( https://github.com/praeclarum/sqlite-net ) 在 Android 上使用 Mono 实现数据库,并具有以下内容: publ
我正在尝试使用最新版本的 sqlite-net-pcl nuget 包创建表 var db = new SQLiteAsyncConnection("data.db"); await db.Creat
我是一名优秀的程序员,十分优秀!