从EF 4中的上下文获取实体名称

时间:2011-08-22 08:34:34

标签: entity-framework

我想从实体获取上下文和属性名称中的所有实体名称。第二个问题可以通过反射解决,但如何做第一部分?

例如,我有实体UserAddress,每个用户都有地址。结果我需要得到以下内容:

Entity: User
Property: LastName
Property: FirstName
Property: Address

Entity: Address
Property: City
Property: Street

1 个答案:

答案 0 :(得分:0)

首先,实体(基本类型ComplexObject)实际上与上下文不同,它们位于自己的类中。

如果要查找所有实体类型,可以使用relfection在当前程序集中搜索任何继承ComplexObject的类型,如下所示:

List<Type> Types = Assembly.GetExecutingAssembly().GetTypes().Where(T => T.IsSubclassOf(typeof(ComplexObject))).ToList();

这些类型中的每一个都使用EdmxComplexType属性定义,该属性为您提供命名空间名称和复杂类型名称。您可以为每种类型T获取这些属性,如下所示:

T Instance_Of_T = (T)Activator.CreateInstance(T);
System.Data.Objects.DataClasses.EdmxComplexTypeAttribute complexTypeAttr = TypeDescriptor.GetAttributes(Instance_Of_T).OfType<System.Data.Objects.DataClasses.EdmxComplexTypeAttribute>().ToList().Single();

string NamespaceName = complexTypeAttr.NamespaceName;
string TypeName = complexTypeAttr.Name;

希望有所帮助