最想要的Entity Framework功能

fmms 12年前
     <div id="news_body">     <p> Entity Framework 团队已经建立了一个<a href="/misc/goto?guid=4958328957021474292">用户之声论坛</a>,以便用户提交功能请求并对它们进行投票。我们聚焦当前得票率最高的 7 个功能请求,同时给出了你现在可用的潜在替代方法。</p>     <p> 这些是至今为止请求频率最高的一些功能——</p>     <p> <strong>1、改进的 SQL 语句生成</strong>(状态=已启动)</p>     <p> 该请求是——</p>     <blockquote>      <p>我亲眼目睹,具有 4 或 5 个子查询的简单的 select 语句却产生了将近 5000 行的 SQL 语句,然而等效的手写 SQL 语句仅有 15 行。</p>     </blockquote>     <p> 对此微软已经取得了一些进展。他们的回复是——</p>     <blockquote>      <p>对 Entity Framework 核心库的更新将包含在 .NET 4.5 中,其中将会包括一些对于 SQL 语句生成的改进。然而并非评论中所提到的所有情形都将予以处理。</p>     </blockquote>     <p> 替代方法: 没有真正的替代方法,除非停止使用 Entity Framework。</p>     <p> <strong>2、批量创建更新删除(CUD)支持</strong> (状态=评估中)</p>     <p> 对于业务线(LOB,即 Line of Business)应用程序而言,批量创建/更新/删除是一关键功能,而在大多数对象关系映射(ORM)工具中大概都没有此功能。像 DBase 和 PowerBuilder 等一些早期编程语言在几十年前已有此种能力。一些人甚至<a href="/misc/goto?guid=4958328957830073816">提出</a>,对象关系映射(ORM)工具不适用于大容量事务,而更适合于在线交易处理(OLTP)及非批处理操作。</p>     <p> 替代方法——</p>     <ul>      <li>对 Entity Framework 的<a href="/misc/goto?guid=4958328958622047418">这个扩展</a>提供了批量更新和删除的能力(但不能批量插入)。</li>      <li>不要使用 Entity Framework 进行大容量事务处理——请自行编写 SQL 语句。事实上,这可能是一处避免使用对象关系映射工具的理想位置。</li>     </ul>     <p> <strong>3、Entity Framework 支持二级缓存(Second Level Cache)</strong>(状态=评估中)</p>     <p> 虽然这是 NHibernate 所支持的功能,但是对于 Entity Framework 却不是现成的。</p>     <p> 替代方法——Julie Lerman 在她的文章“<a href="/misc/goto?guid=4958328959420919136">用 Entity Framework 和 AppFabric 实现二级缓存</a>”中演示了如何使用 Windows Server AppFabric 实现二级缓存。</p>     <p> <strong>4、实体设计器:为拥有 200 个以上实体的使用场景进行加速和优化</strong></p>     <p> 替代方法:一旦模型中的实体数目达到 50 至 100 时就把该模型拆解开来。这篇<a href="/misc/goto?guid=4958328960224669041">以往的博文</a>仍可作为为什么支持此功能不仅是个技术难题而且对于用户体验也是挑战的相关解释。不知道是否微软将会考虑此功能,即使此功能已投票胜出。</p>     <p> <strong>5、多数据库支持</strong>(状态=评估中)</p>     <p> 由于模型目前始终被映射到单一数据库,因此该功能还不可用。</p>     <p> 替代方法—— 需要使用同义词、并合并两个模型,从而<a href="/misc/goto?guid=4958328961029461572">骗过 Entity Framework 以便支持横跨多个数据库</a>。</p>     <p> <strong>6、设计器支持使用 GUID 作为实体键值(Entity Key)</strong> ——与其说这是个功能,不如说是个错误,当使用设计器为某个 GUID 列添加 StoreGeneratedPattern 属性时并不会更新数据模型的存储部分。当创建新记录时,这会导致 GUID 列获得“000..” 的错误值。</p>     <p> 替代方法—— 正如<a href="/misc/goto?guid=4958328961839948850">此文</a>所解释的那样,请在 .edmx 文件中手工添加 StoreGeneratedPattern 属性。</p>     <p> <strong>7、按 Rails 迁移的方式进行数据库架构(schema)迁移</strong> (随着 <a href="/misc/goto?guid=4958326262783121698">Code-First 迁移</a>完成即将与 Entity Framework 4.3 一起到来)</p>     <p> 此功能目前与 Entity Framework 4.3 版本在一起处于测试阶段。有关此功能的更多细节参阅 <a href="/misc/goto?guid=4958326258039608610">MSDN 博客</a>。</p>     <p> 替代方法—— 使用数据库项目来创建升级脚本。一旦 Code-First 新版发布,则重建新的数据库架构(schema),并将其导入一个新的数据库项目中,然后将其部署到旧的数据库上。</p>     <p> 还有许多由不同用户提出的其他有趣的功能想法,你一定要投票或者提交自己的想法,以便让 Entity Framework 团队知道对你而言什么功能是最重要的!</p>     <p> <strong>查看英文原文:</strong><a href="/misc/goto?guid=4958328964107892690">Most-Wanted Features in Entity Framework</a></p>     <p> 译者:高翌翔,基于 .NET 平台进行 Web 应用程序设计、开发,关注敏捷开发和架构设计,及各种提高代码可维护性的最佳实践。</p>     <div id="come_from">      来自:      <a id="link_source2" href="/misc/goto?guid=4958328964905365900" target="_blank">InfoQ</a>     </div>    </div>