我使用 Entity Framework Model-FirstRepository
和Unit of Work
模式,存储库返回 EF POCO。
我假设我无法向 Entity Framework 生成的 POCO 添加行为,所以我的代码现在充满了诸如XyzService
which 是实现 Entity Framework 生成的业务逻辑的单独类之类的东西Xyz POCO
。
我有以下问题:
这有一种不好的代码味道,因为我不仅有 EF POCO,而且我为每个 POCO 提供服务。除了许多类之外,业务逻辑还被拆分到业务实体之外。这是贫血反模式的一个例子吗?
如果我坚持使用 EF,有什么方法可以添加行为(即通过部分类)或其他方式?
看到使用从数据层(在我们的例子中是存储库)返回业务实体的持久无知模式,如果我想从
EF-MODEL -> REPOSITORY-DAL -> BIZ-ENTITY
我看到在业务实体和 EF 模型 POCO 之间会有很多双向映射。Automapper 等实用程序能否优雅地处理我可能面临的嵌套对象的复杂关系?为了减少与其对应的 EF 模型实体重复的业务实体,我是否最好删除 EF 并使用 LINQ to SQL 为每个存储库编写我自己的存储库实现?
任何可以让我专注于代码的推荐方式(而不是像我一样首先将目标固定在 EF 模型上),然后在我准备好编写持久层时仍然使用实体框架,但避免了很多这样做的额外工作和映射?EF Code-First 在这方面会更好吗?
如果我错过了可以帮助开发的其他技术(例如 NHibernate),请随时提及。