【问题标题】:Database and logic layer for ASP.NET MVC applicationASP.NET MVC 应用程序的数据库和逻辑层
【发布时间】:2011-02-25 22:02:32
【问题描述】:

我将开始一个新项目,该项目最初规模很小,但随着时间的推移可能会变得很大。我坚信我将使用 ASP.NET MVC 和 jQuery 作为 UI。由于某些原因,我想将 MySQL 作为数据库,但担心的事情很少。

我对 Linq 完全陌生,但是一旦您熟悉它,它似乎更容易使用。

首先,访问数据应该很容易。所以我想我应该使用 MySQL to Linq,但在某处我读到它不直接受支持,但 MySQL .NET 连接器增加了对 EntityFramework 的支持。我不知道它的优点和缺点是什么。我也听说过 DbLinq。如果我可以实现存储库模式,我会很高兴,因为它允许在逻辑层而不是数据访问层中应用过滤器。如果我使用实体框架可以吗?

我也担心性能。有人告诉我,如果我们使用实体框架,它会获取大量数据然后对其进行过滤。对吗?

所以问题基本上是 -

  1. MySQL 到 Linq 是否可行?如果是,我在哪里可以获得更多详细信息?
  2. 在 MySQL 中使用 EntityFramework 或 DbLinq 的优缺点?
  3. 使用 EntityFramework 或 DbLinq 与 MySQL 访问数据是否容易?
  4. 我能否实现允许在逻辑层而不是数据访问层应用过滤器的存储库模式(当我将 EntityFramework 与 MySQL 一起使用时)
  5. 它会从数据库中获取大量数据然后对其应用过滤器吗?

如果在这种情况下我的问题听起来太多了,如果您可以让我知道作为该领域的经验丰富的人在这种情况下您会做什么(有充分的理由),那应该可以回答我的问题。

【问题讨论】:

  • 如果你有多年的 MSSQL 使用经验,但使用 MySQL 的经验很糟糕,为什么你会选择在实际项目中使用 MySQL(而不是爱好/学习项目)?您可以从 SQL Express 开始,它与完整的 SQL 一样适用于您想要做的事情,它是免费的,并且还具有与 MVC/.NET 完全兼容的额外好处。只是好奇...
  • 我很可能会在共享托管服务提供商上托管这个网站。它们允许大型 MySQL 数据库以比 MS SQL Server 的小型限制更低的成本。其次,有一天当我的​​网站上的点击量很大并且数据增加时,我可能会将它放在我自己的服务器上,这对 SQL Server 的许可将是一个大问题。
  • @Ismail:如果您的点击量很大,但仍然无法从您的申请中获得足够的利润来支付许可费用,那么您将做一些毫无价值的事情。此外,光是流量就可能比许可证花费更多。
  • 许可问题稍后会出现我并不担心。但是...“它们允许大型 MySQL 数据库的成本低于 MS SQL Server 的小型限制。”
  • 如果您没有那么多流量,那么您应该可以使用可以获得的任何大小的 SQL 服务器数据库。如果您获得大量流量,只要您的数据库保持小于 4 GB,SQL Express 仍然可以提供相当多的性能。如果您需要许可副本,您可以加入 WebSiteSpark 并免费获得 3 年,这应该有足够的时间让您赚到足够的钱来支付费用。

标签: mysql asp.net-mvc linq data-access-layer linq-to-mysql


【解决方案1】:

由于我是 ALT.NET 的粉丝,我会建议您在项目中使用 NHibernate 而不是 EntityFramework,您可以在 Google 上搜索它的优势,我相信您会选择它。

【讨论】:

  • 如果其他人投赞成票,我一定会考虑您的建议。根据您的建议,我已经完成了 ayende.com/blog/archive/2010/01/05/…stackoverflow.com/questions/1639043/… 之类的操作。看起来不错。现在我需要测试哪一个适合我的情况。我不知道为什么没有更多人回复这个问题。
  • @Ismail:我猜你没有回复是因为你的问题范围很大,可能是缺乏使用 MySQL 和 MS 技术的经验。
  • NHibernate 在学习曲线和数据访问的易用性方面有多容易?
  • NHibernate 有一个学习曲线,但 Entity Framework 也有。如果您使用 NHibernate,请确保获得 3.0 版,它对 Linq 支持有了很大改进。
【解决方案2】:

根据您提到的几点,我会认真考虑最初使用 MS SQL 而不是 MySQL,并实施 LINQ-to-SQL 而不是 Entity Framework,原因如下:

  1. 您最初预计会有大量流量这一事实告诉我,您需要考虑您计划在哪里结束,而不是从哪里开始。我在 MS SQL 方面的经验比在 MySQL 方面的经验要多得多,但是如果您要从 MySQL 的社区版本开始,然后再升级,那么无论如何,您都将在 Enterprise 版本上产生大量费用。李>
  2. 我听说有一个支持 MySQL 的 LINQ 版本,但是,除非最近发生了变化,否则它仍处于测试阶段。我正在完成一个为期 18 个月的基于 Web 的项目,该项目使用 ASP.NET MVC 1.0、LINQ-to-SQL、JavaScript、jQuery、AJAX 和 MS SQL。我使用 WatiN 实现了存储库模式、视图模型、接口、单元测试和集成测试。技术组合对我来说效果很好,我计划在我正在开发的个人项目中使用相同的组合。
  3. 当您获得带有托管计划的 MS SQL 时,您通常能够从该单个实例创建多个数据库。看起来它们为您提供了更多存储空间,因为它们为您提供了多个 MySQL 数据库,但这仅仅是因为该架构仅支持每个实例创建一个数据库。
  4. 我不会将 Entity Framework 用于我的 ASP.NET MVC 项目,因为我一开始并不喜欢 ADO.NET。我不想打开连接、创建命令对象、填充参数集合、发出执行方法,然后遍历单向读取器对象来获取我的数据。一旦您看到 LINQ-to-SQL 如何简化流程,您也不会想回头。在我之前提到的项目中,我在数据库中有超过 60 个表,大约有 200 个外键关系。因为我在数据层中使用 LINQ-to-SQL 和存储库模式,所以我能够使用不是单个存储过程来构建应用程序。 LINQ-to-SQL 自动防御 SQL 注入攻击并支持乐观和悲观并发检查。

我不知道您的项目是什么,但您不想陷入以后无法扩展应用程序的情况。为最终结果编写代码,而不是为起点编写代码,以后您会省去很多麻烦。

【讨论】:

  • @Paul Mendoza:这种观点的依据是什么?我并不是说我不相信 .NET 4.0 中的 EF 可能会有重大改进,但我只需要知道在哪里进行了改进。如果对 ADO.NET 框架的依赖还在,那我就没有改变的动力了。
猜你喜欢
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2010-12-29
  • 1970-01-01
  • 2014-04-13
相关资源
最近更新 更多