我正在尝试通过使用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是一个表,哪个是View。 EntityType对象未设置此类属性:

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


所以我的问题是:是否有一种方法可以通过仅使用MetadataWorkspace来识别哪个EntitySet是一个表,哪个是一个View(我的意思是不处理XML;)

提前致谢

最佳答案

在深入研究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();
}


老实说,使用实体框架元数据确实很困难。至少它们应该具有强类型的属性。

10-06 01:06