使用我最近遇到的工作单元和存储库模式,对工作单元的更改不会反映到后续查询中。例如:
var ctx = DIContainer.Current.Resolve<IB2bContext>();
var rep = DIContainer.Current.Resolve<IRepository<Word>>(
new DependencyOverride<IB2bContext>(ctx));
rep.Add(new Word () { "One" };
rep.Add(new Word () { "Two" };
rep.GetAll().ToList().ForEach(i =>
Console.Write(i.text)); // nothing seen here
换句话说,除非我调用SaveChanges()将对象持久存储到数据库中,否则我看不到它们。好吧,因为我可以摆弄ChangeTracker和/或做像context.Entry(foo).Property(...)。CurrentValue。但这是否与ddd一样发挥作用?我不这么认为。我曾经称之为数据库事务的一致数据视图在哪里?
请赐教。 阿明
答案 0 :(得分:2)
您的存储库公开了一些GetAll
方法。该方法本身执行数据库查询。如果要查看未插入数据库的本地数据,则必须将它们添加到结果集中。例如:
public IEnumerable<Word> GetAll()
{
DbSet<Word> set = context.Set<Word>();
return set.AsEnumerable().Concat(set.Local);
}
查询执行仅负责返回持久(实际)数据。