如何從ObjectContext
中提取Types
的列表?從EntityFramework ObjectContext獲取類型集合
例如,我有一個包含名爲「Bank」的實體和名爲「Company」的實體的對象上下文。 我想獲得它們的EntityObject類型。
我怎樣才能做到這一點?
如何從ObjectContext
中提取Types
的列表?從EntityFramework ObjectContext獲取類型集合
例如,我有一個包含名爲「Bank」的實體和名爲「Company」的實體的對象上下文。 我想獲得它們的EntityObject類型。
我怎樣才能做到這一點?
我假設你在運行時要查詢的生成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>
其中T
是EntityObject
一個子類對象上下文所有的公共屬性。
如果您使用動態數據這變得更容易,我只是在我們的應用程序之一,這樣做
MetaModel.GetModel(objectContext.GetType()).Tables.Select(t => t.EntityType);
在EF4.0,只要刪除此行:&& propertyType.Name ==「ObjectQuery` 1「,結果會好的,否則什麼都不會返回。你能解釋一下嗎? – 2014-01-03 12:26:23