entity-framework - Entity Framework - 它是否适合企业级应用程序?

标签 entity-framework entity-framework-4.1

我有一个 Web 应用程序:

  • 1 TB 数据库
  • 200+ table
  • 至少 50 个表,每个表有 1+ 百万条记录
  • 10+开发者
  • 1000个并发用户

  • 本项目目前使用 Ad-Hoc Sql,由自定义 ORM 方案生成。
    我不支持自定义 ORM(缺少许多高级功能),而是考虑切换到 Entity Framework 。

    我在一个较小的项目上使用了 EF 4.1(代码优先),它运行得很好,但是对于上面更大的项目,它是否可扩展?

    最佳答案

    我(高度)同意 marvelTracker(和 Ayende)的想法。
    不过,这里有一些进一步的信息:
    重点战略
    使用 GUID 作为主键时有一个众所周知的成本。它由 Jimmy Nilsson 描述,并已在 http://www.informit.com/articles/article.aspx?p=25862 上公开发布。 . NHibernate 支持 GUIDCOMB 主键策略。然而,在 EntityFramework 中实现这一点有点棘手,需要额外的步骤。
    枚举
    EntityFramework 本身不支持枚举。直到六月 CTP 增加了对枚举的支持 http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-enums-june-ctp.aspx映射枚举的唯一方法是使用变通方法 请查看:How to work with Enums in Entity Framework?
    查询:
    NHibernate 提供了多种查询数据的方法:

  • LINQ(使用 re-motion 的 re-linq 提供程序,https://www.re-motion.org/web/)
  • 封装在查询对象中的命名查询
  • ICriteria/QueryOver 用于事先不知道条件的查询
  • 使用 QueryOver 投影和聚合(在某些情况下,我们只需要实体的特定属性。在其他情况下,我们可能需要聚合函数的结果,例如平均值或计数):
  • PagedQueries:为了避免让用户不堪重负,并提高应用程序的响应能力,大型结果集通常被分解为较小的结果页面。
  • 将多个 ICriteria 和 QueryOver 查询组合成单个数据库往返的多查询
  • 分离查询是应用程序部分中的查询对象,无需访问 NHibernate session 。然后这些对象在其他地方通过 session 执行。这很好,因为我们可以避免使用许多方法的复杂存储库。

  • ISession的QueryOver:
    // Query that depends on a session:
    premises = session.QueryOver<Premise>().List();
    
    分离的QueryOver:
    // Full reusable query!
    var query = QueryOver.Of<Premise>();
    
    // Then later, in some other part of ther application:
    premises = query.GetExecutableQueryOver(session).List(); // Could pass IStateleSession too.
    
    开源
    NHibernate 在 http://sourceforge.net/projects/nhcontrib/ 上有很多贡献项目。
    该项目为 NHibernate 提供了许多非常有用的扩展(以及其他):
  • 缓存提供程序(用于二级缓存)
  • 没有默认构造函数的实体的依赖注入(inject)
  • 全文搜索(Lucene.NET 集成)
  • 空间支持(NetTopologySuite 集成)

  • 支持
    EntityFramework 附带 Microsoft 支持。
    NHibernate 有一个活跃的社区:
  • https://stackoverflow.com/questions/tagged/nhibernate
  • http://forum.hibernate.org/
  • http://groups.google.com/group/fluent-nhibernate

  • 另外,看看:
    http://www.infoq.com/news/2010/01/Comparing-NHibernate-EF-4

    关于entity-framework - Entity Framework - 它是否适合企业级应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944291/

    相关文章:

    entity-framework-4 - 如何从 LINQ to Entities 服务器端调用标量值函数

    .net - Entity Framework 4.1 T4 输出到 IDbset

    mysql - Entity Framework Code First - MySQL - 错误找不到表

    entity-framework - FirebirdSql.Data.FirebirdClient.FbException : too many open handles to database

    c# - 控制创建 Entity Framework ObjectContext 的频率

    entity-framework - 有人使用代码优先方法与 Edmx 文件混合的 Entity Framework 吗?

    entity-framework - Entity Framework - 不区分大小写 包含?

    c# - Asp.net MVC View 中的延迟执行是一件非常糟糕的事情吗?

    C# - 制作一个接受任何类型的通用 foreach 方法?

    c# - 使用 LINQ 连接后获取特定对象