58

我即将开始实施一个采用 DDD 方法构建的项目的数据访问基础架构(这是我对 DDD 的第一次尝试,所以要温柔;-))。

我将使用实体框架。到目前为止,我一直在研究 Julie Lerman 在她的好书Programming Entity Framework中教授的方法,其中使用了ADO.NET POCO 实体生成器,对 T4 模板和一些自定义代码进行了一些更改。
今天,我开始阅读有关 EF4.1 和ADO.NET DbContext Generator的文章,使用Database First方法,我正在尝试决定应该使用哪一个。

DbContext 和 EF4.1 在 DDD 上的方法似乎比 POCO 实体更好,更干净,但我担心它可能会在不久的将来导致一些问题,因为 EF4.1 仍处于 RC 中。

ADO.NET 团队博客,我知道 EF4.1包括:

  • 枚举支持
  • 空间数据类型支持
  • Code First 中的存储过程支持
  • Code First 中的迁移支持
  • Code First 中的可定制约定

据我了解,由于我将使用Database First,因此未包含的功能数量较少。

总之,我的问题是:
我可以用 EF4.1 DbContext 生成器替换POCO 实体生成器吗?

4

1 回答 1

54

从干净创建 POCO 实体的角度来看, 两个生成器之间没有区别。两个生成器都生成相同的实体,但是,ADO.NET POCO 实体生成器基于ObjectContext的 API,而 ADO.NETDbContext生成器基于DbContext的 API。

DbContext 的 API 有一些非常好的新特性(本地、导航属性上的查询等),并且 API 以某种方式被简化,但同时看起来 ObjectContext API 中使用的一些特性在 DbContext API 中缺失(或者至少它有尚未充分探索)。

EF 4.1 RC 是上线版本。这意味着您可以使用它构建一个真正的应用程序,因为 API 在 RTW 中不会更改(只会修复错误)。RTW 也应该在下个月发布,所以我认为在最终版本发布之前你还没有准备好你的应用程序。

ObjectContextAPI 还是DbContextAPI?ObjectContext文档和博客文章更好地涵盖了 API。你可以找到很多关于它的例子。它的局限性也是众所周知的。DbContextAPI 是新版本。一个非常有前途的版本,主要是因为代码优先的方法。博客文章的数量仍然非常有限,没有书籍,API 也没有得到足够的证明。所以这取决于你是否准备好使用新的 API?如果不是,那么ObjectContextAPI 仍然是一个不错的选择,因为您不需要代码优先的方法。

于 2011-03-17T15:28:04.687 回答