2010-11-15 56 views
2

我试图复制EF CTP4中我们使用NHibernate的许多实践。EF CTP4何时调用context.SaveChanges

目前我们有一个通用的知识库接口(CTP4实际上使DbContext.Set非常容易)。

我们正在传递上下文并使用StructureMap来根据HttpRequest对其进行范围。

在NHibernate中,我们传递了ISession(再次使用StructureMap创建),但使用ActionFilter(UnitOfWork)在请求结束时提交事务。

我们在EF CTP4中有相同的交易吗?如果不是,我应该使用相同的过滤器来调用context.SaveChanges(),或者只是在存储库中执行此操作。

请注意,最简单的测试方法是查看一个实体是否是新建的。通过NH,我们可以直接调用ISession.SaveOrUpdate。请注意,我所有的实体都使用Guid标识符。也许检查默认(Guid)?

谢谢。

+0

你知道了吗? – Chad 2011-01-02 14:22:54

+0

@Chad,我做了类似于下面的帖子。缺点是EF不直接公开交易,因此您失去了对NH的控制权(例如明确回滚交易)。另外,在我的过滤器中使用了System.Transactions,我发现这对于SQLCE是不可能的。 – 2011-06-14 07:46:21

回答

1

我知道这是一个迟到的答案,你现在已经想通了,但我想它对搜索的人很有用。 Rob conery在使用actionfilter和Ef为每个请求范围创建事务方面拥有很棒的职位。

Rob C Article

哦,是的,我会创造对测试默认(GUID)的通用仓库的UpdateInsert()方法。

+0

我们最终做了类似的事情,并调用SaveChanges OnActionExecuted。 – 2011-06-14 07:47:27

+1

仅供参考,链接已损坏。 – 2013-08-02 09:56:53