В случае, если это кому-нибудь поможет, мне нужно было делать это, не зная заранее типа (поэтому я не мог легко сделать CreateObjectSet<YourEntity>()
, потому что я не знал YourEntity
), поэтому я мог адаптировать решение @Ladislav к следующему:
// variable "type" is a System.Type passed in as a method parameter
ObjectContext objectContext = ((IObjectContextAdapter)this.context).ObjectContext;
IEnumerable<string> retval = (IEnumerable<string>)objectContext.MetadataWorkspace
.GetType(type.Name, type.Namespace, System.Data.Entity.Core.Metadata.Edm.DataSpace.CSpace)
.MetadataProperties
.Where(mp => mp.Name == "KeyMembers")
.First()
.Value;
Кажется странным, что MetadataWorkspace.GetType
требует строки имени типа и пространства имен вместо System.Type, но это лучшее, что я мог найти.