ADO.NET实体框架 - 预生成视图 -

时间:2009-07-19 05:26:21

标签: entity-framework ado.net

我们正在为我们的ASP.NET应用程序使用ADO.NET Entity。

我已经读过预先生成的视图可以提高性能。转到博客文章,

http://blogs.msdn.com/adonet/archive/2008/06/20/how-to-use-a-t4-template-for-view-generation.aspx,我生成了视图。命名空间&生成的类

namespace Edm_EntityMappingGeneratedViews
{


    /// <Summary>
    /// The type contains views for EntitySets and AssociationSets that were generated at design time.
    /// </Summary>
    public sealed class ViewsForBaseEntitySets4D4A6E0AA7AF6B2298FABB4F22235831 : System.Data.Mapping.EntityViewContainer
    {

        /// <Summary>
        /// The constructor stores the views for the extents and also the hash values generated based on the metadata and mapping closure and views
        /// </Summary>
        public ViewsForBaseEntitySets4D4A6E0AA7AF6B2298FABB4F22235831()
        {
            this.EdmEntityContainerName = "JSEntities";

我将此添加到我的数据层并测试性能。无法看到太多改善。 CPU使用率总是达到20-30%利用率(响应时间良好)并在500毫秒内减少回0% - 1秒。我认为由于每次生成视图,CPU利用率很高。

我无法理解实体框架如何知道这是我的模型事件的预生成视图类,而MyModel.edmx&amp; MyModel.Views.cs与文件名匹配。

我是否必须更新Web.Config或App.Config以将View类映射到某个地方的模型?

请澄清。

1 个答案:

答案 0 :(得分:5)

我一直想知道同样的事情并且正在进行一些挖掘。

据我所知,生成的类文件包含一个程序集级属性EntityViewGenerationAttribute,它定义了包含预编译视图的类类型。 然后,在这里我只进行有根据的猜测,在编译时,必须通过反射加载类,并以某种方式绑定到视图定义的查询。可能在ESQL缓存中,这将具有一定的意义。

即使视图是预编译的,它们也只生成ESQL,而不是将要运行的实际TSQL。但是,预编译视图确实允许执行查询以跳过验证和ESQL生成步骤,这应该会带来轻微的性能提升,尤其是对于大型编译查询。