2009-07-26 137 views
3

如何從ObjectContext中提取Types的列表?從EntityFramework ObjectContext獲取類型集合

例如,我有一個包含名爲「Bank」的實體和名爲「Company」的實體的對象上下文。 我想獲得它們的EntityObject類型。

我怎樣才能做到這一點?

回答

5

我假設你在運行時要查詢的生成ObjectContext類獲取EntityObject類的列表。然後,它成爲一個鍛鍊的反思:

PropertyInfo[] propertyInfos = objectContext.GetType().GetProperties(); 
IEnumerable<Type> entityObjectTypes = 
    from propertyInfo in propertyInfos 
    let propertyType = propertyInfo.PropertyType 
    where propertyType.IsGenericType 
    && propertyType.Namespace == "System.Data.Objects" 
    && propertyType.Name == "ObjectQuery`1" 
    && propertyType.GetGenericArguments()[0].IsSubclassOf(typeof(EntityObject)) 
    select propertyType.GetGenericArguments()[0]; 

該代碼會發現已鍵入System.Data.Objects.ObjectQuery<T>其中TEntityObject一個子類對象上下文所有的公共屬性。

+0

在EF4.0,只要刪除此行:&& propertyType.Name ==「ObjectQuery` 1「,結果會好的,否則什麼都不會返回。你能解釋一下嗎? – 2014-01-03 12:26:23

0

如果您使用動態數據這變得更容易,我只是在我們的應用程序之一,這樣做

MetaModel.GetModel(objectContext.GetType()).Tables.Select(t => t.EntityType); 
相關問題