EF如何通过视图生成知道类viewforbaseentityset的名称

时间:2012-10-02 14:24:24

标签: entity-framework

使用EF5.0和查看编译,我可以看到它一切正常。 我从调用堆栈中看到视图被调用。 edmx属性元数据工件处理设置为嵌入在程序集

调用下面的这个方法(构造函数)。但是它怎么知道这个名字呢? 我可以在一个装配中拥有多个型号吗? 我很高兴它有效,但我想知道下面发生了什么。

有什么想法吗?

public ViewsForBaseEntitySetsFE35229A04DD6E5585E40F6CE4FBC33EE6C9199EBD58235921B21B951250FF67()
    {
        this.EdmEntityContainerName = "BosMasterEntities";
        this.StoreEntityContainerName = "BosMasterModelStoreContainer";
        this.HashOverMappingClosure = "0edb68dd82ba8436bcabb10d30d018482670a8944e1013c90d795d35afea1b8d";
        this.HashOverAllExtentViews = "d0d326d5289ea43aa6ea7854e053ba0bd410789e3196101e38bace646c0fa404";
        this.ViewCount = 34;
    }

1 个答案:

答案 0 :(得分:4)

您实际上在代码剪切中遗漏了两条重要信息 - 代码看起来更像是这样:

[assembly: System.Data.Mapping.EntityViewGenerationAttribute(typeof(Edm_EntityMappingGeneratedViews.ViewsForBaseEntitySets6EB2ED815B2C1EA5C534EACE1F3EA695AAF84C0704F820B6C583CE86EFE39C0A))]

namespace Edm_EntityMappingGeneratedViews
{    
    public sealed class ViewsForBaseEntitySets6EB2ED815B2C1EA5C534EACE1F3EA695AAF84C0704F820B6C583CE86EFE39C0A : 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 ViewsForBaseEntitySets6EB2ED815B2C1EA5C534EACE1F3EA695AAF84C0704F820B6C583CE86EFE39C0A()
        {
            this.EdmEntityContainerName = "Context";
            this.StoreEntityContainerName = "CodeFirstDatabase";
            this.HashOverMappingClosure = "565d1a0ab9083c0e3d54e4d636e9ea8ace70a69f415e728c42b1e687acf65932";
            this.HashOverAllExtentViews = "84db96d2d3c40ffdbcbf3ab1e49f50e068df40cd9e62f87416402f6eb3569da0";
            this.ViewCount = 2;
        }
        ...

首先,有一个EntityViewGenerationAttribute类型的程序集级别属性。只有具有此属性的程序集才会被视为可以包含视图的程序集。如果仔细查看该属性,您将看到此属性具有包含视图的类的类型。您可以在一个程序集中拥有多个EntityViewGenerationAttribute。其次,包含视图的类是从EntityViewContainer派生的。如果EntityViewGenerationAttribute中指定的类型不是从EntityViewContainer派生的,则EF将抛出。