背景: 这是我第一个使用存储库、服务和实体框架的项目。现在我专注于数据层,以及我应该如何构建它。我只是在使用 SQLite,但我需要 Dropbox 以及将 JSON 对象读/写到本地存储的能力,所以我希望通过创建一个数据层我可以稍后添加这些功能。
我有的:
IRepository.cs
using System;
namespace Premier.Data.Repositories
{
public interface IRepository<TEntity> where TEntity : class
{
void Create(TEntity entity);
void Remove(TEntity entity);
void Update(TEntity entity);
}
}
存储库.cs
using System;
using System.Data;
using System.Data.Entity;
using System.Linq;
namespace Premier.Data.Repositories
{
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
protected DbContext context;
protected IDbSet<TEntity> entities;
public Repository(DbContext dbContext)
{
context = dbContext;
entities = dbContext.Set<TEntity>();
}
public void Create(TEntity entity)
{
entities.Add(entity);
}
public void Update(TEntity entity)
{
entities.Attach(entity);
context.Entry(entity).State = EntityState.Modified;
}
protected IQueryable<TEntity> Query()
{
return entities;
}
public void Remove(TEntity entity)
{
entities.Remove(entity);
}
}
我不明白的是:
根据我的阅读,服务与存储库通信,而我的 WPF 项目将只与服务通信。这是正确的,还是视图模型也会访问存储库?
我在哪里访问这些存储库,如何确保 DbContext 具有最新数据?例如,在部门视图中,可以添加或删除部门。在此项目中运行的连续服务的每个间隔都需要在可用时(或在间隔时间内)获得最新的详细信息。最初我打算使用工厂和单例之间的混合来创建存储库并让它们共享一个 DbContext。但是,我读了一个 SO question 说 global DbContext 是一个坏主意。所以现在我想知道,我将如何回答如何从我的持续服务中获取最新信息的问题。
谢谢你的时间,我很感激。