EF 4与POCO在类库中作为MVC 2模型

时间:2010-08-13 16:42:13

标签: entity-framework asp.net-mvc-2

我正在使用POCO作为我的MVC2 Web应用程序模型来探索实体框架4。我需要在单独的库中使用模型和数据访问代码的原因是我可以将其与另一个Web应用程序共享,该应用程序用作客户访问我们数据的门户。

我的问题是,通过在另一个项目中使用我的EF4和POCO代码,我会丢失任何典型的MVC2模型功能吗?或者也许另一种问题是,如果MVC框架在一个单独的项目中而不是在Models文件夹中,那么它将能够与Model层一起工作吗?

编辑:我忘了提到我正在使用POCO,而不是你通常用EF为每个实体生成的类。

1 个答案:

答案 0 :(得分:5)

仅适用于小型项目的单一装配项目

我从不喜欢“Models”文件夹。我宁愿将单独的图层/层放在单独的程序集中。 MVC项目模板只是在一个程序集中创建一个分层应用程序。

我更喜欢由多个项目组成的解决方案:

  • 网络 - 前端网络应用程序即。 Asp.net MVC(参考服务对象
  • 服务 - 业务层程序集(参考数据对象
  • 对象 - 全部共享的POCO类,接口等(不引用任何其他解决方案项目)
  • 数据 - 实际的EF模型和扩展程序,存储库等(引用对象

如果您的应用程序不仅仅是几个简单的屏幕,那么这是一种更加可控和结构化的方式。

所以在过去的项目中:EF模型位于数据项目(以及存储库等),而POCO位于Objects中。项目之间的所有通信都是使用Objects项目中的类完成的。

所以网络使用服务
反过来又使用了存储库(在数据中),
这反过来又称EF操纵数据 所有来回传递的数据都是在对象中使用POCO。

因此,当存在写入操作时,存储库必须在返回数据和创建实体时将实体转换为实际的POCO(它们不是1:1)。这种转换是通过实体上的扩展方法完成的,因此转换总是在一个方法中完成,这使我们在更改实体或POCO类时更容易维护。我们没有必要扫描所有转换的所有代码,我们只是调整了ToPoco()扩展方法(它们实际上是这样调用的)。