【发布时间】:2013-04-06 20:57:35
【问题描述】:
在我的解决方案中,我有两个项目。一个是主要的 MVC4 项目。另一个是 DataLayer 项目,其中包含从现有数据库(可能稍后还有一些存储库)生成的 Entity Framework 5 edmx 模型。
问题是 pocos EF5 生成位于 DataLayer 项目中。但我需要它们在 MVC4 项目的 Models 文件夹中。
我希望单独的 DataLayer 项目增加关注点的抽象和分离,但我不知道如何将这两个部分放在一起。
(我想在 Models 文件夹中再维护一层 pocos,但这似乎不对)
【问题讨论】:
-
为什么在 MVC4 项目中“需要”它们? EF 将在创建 .edmx 的同一程序集中生成这些类。如果您需要访问这些模型,请记住从 MVC4 项目中添加对您的数据项目的引用。然后你可以引用模型 Data.EntityObjectName (或者你的命名空间工作)
-
@Tommy 是的,但是这些类不位于 Models 文件夹中。一个缺点是 Visual Studio 无法在“添加视图”对话框中将它们识别为可供选择的模型。也许还有其他缺点。 Models 文件夹是 MVC4 模板尝试创建的顺序中的关键部分。我觉得把它留空是不对的。
-
@YaronLevi 在以这种方式生成视图时,我通常将该模型字段留空。滚动需要很长时间,而且我已经知道我想要的模型的完整命名空间。所以我只是在视图顶部手动声明它。
@model FullNamespace.ViewModel -
是的,它们确实会显示在该下拉列表中,您只需要在添加或删除对数据项目模型的任何更改之前重新编译数据项目。
-
如果您将 EF 模型视为域模型,我认为下一步对您来说会更清楚。让 EF 在你的域项目中做这件事,然后让你的 mvc4 项目的 repos 构建一些客户端友好的模型。这允许您有一个单独的模型来装饰视图等,并允许您将域模型分开。请参阅下面的答案。
标签: c# asp.net-mvc-4 entity-framework-5 ef-database-first