如何区分EF MetadataWorkspace中的视图和表?

时间:2010-12-09 10:10:14

标签: entity-framework-4

我正在尝试使用 MetadataWorkspace 处理Entity Framework数据模型的元数据信息。我知道如何提取所有表,但以下代码将返回存储模型中的所有视图和所有表。

using ( NorthwindEntities dbContext = new NorthwindEntities() )
{
    MetadataWorkspace workspace = dbContext.MetadataWorkspace;
    string temp = ( dbContext.Categories as ObjectQuery ).ToTraceString();
    IEnumerable<EntityType> tables = workspace.GetItems<EntityType>( DataSpace.SSpace );
}

当我看一下edmx文件时,我可以看到有一个名为 store:Type 的属性描述了哪个 EntitySet 是一个表,哪个是一个视图。 EntityType对象不会使用此类属性:

<EntitySet Name="Invoices" EntityType="NorthwindModel.Store.Invoices" store:Type="Views">

所以我的问题是:有没有办法识别哪个EntitySet是一个表,哪个是仅使用MetadataWorkspace的视图(我的意思是不处理XML;)

提前致谢

1 个答案:

答案 0 :(得分:2)

在深入挖掘EF MetadataWorkspace之后,我相信我找到了一个解决方案:

using ( AdventureWorksEntities dbContext = new AdventureWorksEntities() )
{
    MetadataWorkspace mw = dbContext.MetadataWorkspace;
    dbContext.Locations.ToTraceString();
    EntityContainer entityContainer = mw.GetItems<EntityContainer>( DataSpace.SSpace ).Single();
    EntitySet entitySet = entityContainer.GetEntitySetByName( "Location", true );
    string type = entitySet.MetadataProperties[ "http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator:Type" ].Value.ToString();
}

如果我说实话,使用Entity Framework元数据真的很难。至少他们应该做强类型的属性。