带有实体框架的ASP.NET MVC4

时间:2013-05-13 19:09:23

标签: asp.net-mvc entity-framework

我正在设计一个带有MVC4 Web应用程序的ASP.NET,用于为不同客户提供不同数据库的多租户应用程序。

我打算使用实体框架,因为我是新手,我假设我遵循数据库第一模型,我有以下问题。

  1. 是否仍需要生成EDMX文件?换句话说,在EDMX中生成的实体模型是否足够,或者是否需要创建另一层实体模型并将其映射到数据库?

  2. 实体概念模型应该放在我的应用程序架构中?我可以将所有模型(数据库模型,视图模型)放在一个单独的项目中吗?

4 个答案:

答案 0 :(得分:1)

多租户与父母"客户"是同一个数据库。对象或类似的东西,你是在构建一个多实例应用程序(不确定它是否与你的问题相关,但根据你如何部署应用程序的重要区别)?

尽可能简单地回答您的其他问题:

  1. 是的,您需要生成数据模型,然后将它们放在任何您想要的位置。这可能足以满足您的需求,但通常您也希望构建一些自定义视图模型。
  2. 如果您需要多个项目来访问相同的模型,而您只想将它​​们保存在一个位置,请将它们提取到自己的项目中。如果整个应用程序将包含在一个项目中,只需将其放入"模型"文件夹中。

答案 1 :(得分:1)

实体框架与NHibernate和EF竞争的日子相比已经走过了漫长的道路。#34;投票不信任"。 4.x用很多选择改变了你结束的球赛,遗憾的是很多文章引用了4.x,所以当你使用MVC 4时,你最有可能找到5.0版本,而且有些例子并不那么有趣起床并跑步。

Julie Lerman写了很多关于EF,Dbcontex,EF Code First的书。

您可以跳过创建EDMX文件,这样做有利有弊。如果你是硬核编码器,你想开发POCO类,然后连接到你的数据库,这很好。或者,您可以使用EDMX。您可以使用模型优先版本,迁移等...

Code First is for both flexibility of whether you have an existing database or do not have a database.

我个人喜欢有很多项目让我取代了" DAL"是一个ProjectName.Data项目,查看存储库模式(最终是工作单元模式)。

您不希望在控制器中出现业务逻辑和代码泄漏。 SRP(单一责任原则)让你的控制器变瘦。 Nerddinner和互联网上的一些其他MVC项目试图建立一个体面的结构。 MusicStore http://mvcmusicstore.codeplex.com/和Contoso http://contosontiermvc.codeplex.com/虽然它们具有mvc3主结构,但您可以很好地了解如何构建数据。

答案 2 :(得分:0)

  1. 您可以通过尝试从现有数据库创建实体框架来从数据库生成。 (我认为您右键单击新模型的表面并从数据库生成)

  2. 他们可以驻留在不同的项目中,是的

答案 3 :(得分:0)

  

是否仍需要生成EDMX文件?

我可能会误解您的问题,但是如果您创建了数据库,并且想要使用EF Database First技术访问它,那么您将需要生成实体框架模型(EDMX)以便使用EF来访问数据库。但是你将从数据库中生成它。有一个模型第一技术,这是你 NOT 想做的事情。

还有另一种选择,您可以先使用代码,而不是先使用数据库,而不是生成EDMX,您可以生成流畅的映射。基本上是对代码优先模型进行逆向工程。这是我知道在没有EDMX的情况下使用EF访问数据库的唯一方法。

  

实体概念模型应该在我的应用程序架构中的哪个位置?我可以将所有模型(数据库模型,视图模型)放在一个单独的项目中吗?

我通常在类库中拥有我的EF模型(实体模型),无论它们是EDMX还是Code代码。这允许我在可能访问同一数据库的项目中重用该库。

我的ViewModel进入MVC项目的Models文件夹,因为它们特定于MVC项目中的Views。

很多人都有另一个层,通常是具有GetPerson,GetOrder,GetOrders等函数的类,它们允许您调用并处理查询实体模型,或者可能返回允许MVC项目添加的IQueryable附加标准。该层可能也可能不会从查询中填充ViewModel。有很多变化。您可以阅读“存储库模式”。我个人强烈建议您在使用EF和MVC一段时间之前不要实现此层。这样你就可以开始看到什么是多余的,或者弄乱你的控制器,这将有助于你更好地衡量你想要使用的存储库模式的变体。如果您没有遇到它解决的问题,很难采用正确模式。