2010-12-09 35 views
3

我試圖通過使用元數據工作區來處理實體框架數據模型的元數據信息。我知道如何提取所有表格,但以下代碼將從存儲模型中返回所有視圖和所有表格。如何區分EF MetadataWorkspace中的表與視圖?

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文件,我可以看到,有一個名爲店的屬性:即描述了的EntitySet是一個表,這是一個視圖類型。這些財產不被的EntityType對象esposed:

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

所以我的問題是:有沒有認識到它的EntitySet是一個表,這是僅使用MetadataWorkspace(我的意思是沒有處理XML視圖的方式;))

在此先感謝

回答

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元數據確實很難。至少他們應該做強類型的屬性。