基于EF4.1的存储库和一致的数据视图

时间:2012-03-02 11:15:22

标签: entity-framework entity-framework-4.1 domain-driven-design

使用我最近遇到的工作单元和存储库模式,对工作单元的更改不会反映到后续查询中。例如:

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一样发挥作用?我不这么认为。我曾经称之为数据库事务的一致数据视图在哪里?

请赐教。 阿明

1 个答案:

答案 0 :(得分:2)

您的存储库公开了一些GetAll方法。该方法本身执行数据库查询。如果要查看未插入数据库的本地数据,则必须将它们添加到结果集中。例如:

public IEnumerable<Word> GetAll()
{
    DbSet<Word> set = context.Set<Word>();
    return set.AsEnumerable().Concat(set.Local);
}

查询执行仅负责返回持久(实际)数据。