Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 对于多个网站和大型应用程序来说,实体框架是一个糟糕的选择吗?_Asp.net Mvc_Performance_Sql Server 2005_Entity Framework 4 - Fatal编程技术网

Asp.net mvc 对于多个网站和大型应用程序来说,实体框架是一个糟糕的选择吗?

Asp.net mvc 对于多个网站和大型应用程序来说,实体框架是一个糟糕的选择吗?,asp.net-mvc,performance,sql-server-2005,entity-framework-4,Asp.net Mvc,Performance,Sql Server 2005,Entity Framework 4,场景:我们目前有一个网站,正在与一个管理员网站一起构建两个网站。我们正在使用asp.net-mvc、SQLServer2005和EntityFramework4。因此,目前我们有一个单一的解决方案,所有的网站都使用相同的实体框架模型。该模型目前有70多个表,未来可能会有更多的表。。。400左右 问题:实体框架模型在变大时是否会变慢?我读过不少文章,他们说与ado.net相比,由于额外的映射层,速度非常慢?此外,我们曾考虑过使用多个模型,但这似乎也是一种不好的做法,当我们不使用任何ORM时,LIN

场景:我们目前有一个网站,正在与一个管理员网站一起构建两个网站。我们正在使用asp.net-mvc、SQLServer2005和EntityFramework4。因此,目前我们有一个单一的解决方案,所有的网站都使用相同的实体框架模型。该模型目前有70多个表,未来可能会有更多的表。。。400左右

问题:实体框架模型在变大时是否会变慢?我读过不少文章,他们说与ado.net相比,由于额外的映射层,速度非常慢?此外,我们曾考虑过使用多个模型,但这似乎也是一种不好的做法,当我们不使用任何ORM时,LINQ有用吗


所以,我们只是好奇,所有使用类似技术的大型网站在使用像EF这样的ORM时取得了良好的性能,或者他们从来没有选择ORM吗?我还开发了一个LINQtoSQL应用程序,该应用程序有150多个表,我们遇到了巨大的启动损失,当第一次加载时,站点需要15-20秒才能响应。我很确定这是因为LINQtoSQLORM的启动成本很高。如果有人能分享他们在这方面的经验和想法,那就太好了?遵循哪些最佳实践?我知道这取决于每个应用程序,但如果性能是一个问题,那么应该采取哪些最佳步骤?

我没有一个明确的答案给你,但我发现这篇文章:,它可能会为你提供信息,特别是提到这个网站的第二高答案:


我个人的经验是,到目前为止,对于我所见过的任何ORM映射器,Joel的都非常适用。因此,如果您打算使用EF,请确保手头有优化的备选方案。

我对EF最大的关注是管理这件事,如果您有多个模型,那么您将突然有多个工作要做维护它们,确保您永远不会为正确的数据库更新错误的模型,反之亦然。目前,这对我们来说是一个问题,而且看起来只会变得更糟

就个人而言,我喜欢编写SQL,而不是依赖于抽象之上的抽象。DB知道SQL,因此我对手工编制的存储过程或某些情况下的手工编制的SQL很满意。这样做的一个巨大好处是,我可以回复代码以查看它试图做什么,并通过c&p将sql从日志发送到sql查询编辑器来查看结果数据。在我看来,这使得支持变得非常简单,它完全否定了您可能从使用ORM中获得的任何程序员好处(特别是当EF生成绝对不可读的SQL时)


事实上,仔细想想,ORM给您带来的唯一好处是您可以更快地编写代码(当然,一旦您设置好了所有内容并且没有更改模式),最终,我认为这一好处不值得付出代价,当你认为我大部分的编码时间都在考虑我将要做什么的时候,“做它”的部分对于设计、测试、支持和维护部分来说是相对较小的。

< P>我相信你一定能用一个有大量表的数据库以EF4的方式工作。也就是说,你一定要克服EF特有的一些障碍

我不认为LinqToSql是一个好的替代方案,因为微软已经在很大程度上停止了对它的增强

你考虑过其他的选择吗?ADO.NET?尼伯酸盐?存储过程


我知道NHibernate可能很难快速为400个表建立SessionFactory,但这种情况只在网站应用程序启动时发生一次,如果应用程序被大量使用,这应该是相当罕见的。每个web请求通常都有一个新会话,从会话工厂创建会话非常快速且便宜。

这是一个糟糕的答案。“快一点”哈哈。我不知道你在做什么,但如果你的EF生产力提高只比为每个实体编写4个存储过程快一点,那么你就做错了。-你关于管理的俏皮话也毫无意义,因为你最终会改变你所有的CRUD程序。@jfar-同意,-1我也同意。使用EF的另一个开发速度优势是能够轻松地用内存中的备份存储替换SQL数据库,该存储使用LINQ to对象进行单元测试,从而允许您测试查询,而不是模拟查询。我如何用SP捕捉
GetPaymentAmount
COUNT
而不是
SUM
?当然,通过做更多的工作和编写额外的测试。不,谢谢。也许管理问题更多地与我们必须维护的多个模型有关,但是@JulianR-你真的是说完全模仿数据库比用返回预期结果的访问器替换SP访问器更容易?你可以单独测试SP,你知道,这是一个很好的划分或工作,非常简单。您只需创建一个
字典
,这就是您的“数据库”,您可以用单元测试数据填充它。无需为您的SP创建其他测试(此外,我不希望测试依赖于数据库访问),您基本上可以免费测试查询,因为使用EF时,无论您是针对SQL数据库还是
字典进行查询都无关紧要。ormbattle.net的名声很差,因为它是由一家商业ORM供应商出于营销目的启动的,而没有与其他ORM供应商进行合作。性能测试不一定能代表现实生活中的ORM使用场景,应该谨慎对待。