Теоретически да. Практически я не уверен, потому что с помощью простого теста я не смог получить эту информацию во время выполнения - я вижу ее в отладчике, но не могу получить ее, потому что тип, который мне нужно использовать, является внутренним в инфраструктуре сущностей.
Теория. Вся картографическая информация доступна во время выполнения, но не через отражение. Они хранятся в экземпляре класса MetadataWorkspace
, который определенно не предназначен для непосредственного использования, поскольку каждое взаимодействие с этим классом требует некоторого времени в отладчике, прежде чем вы найдете способ получить нужные данные. Эти данные не доступны через API DbContext. Вы должны преобразовать DbContext
обратно в ObjectContext
и получить доступ к MetadataWorkspace
.
ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
GlobalItem storageMapping = objContext.MetadataWorkspace.GetItem<GlobalItem>("NameOfYourContextClass", DataSpace.CSSpace);
Теперь storageMapping
является экземпляром класса System.Data.Mapping.StorageEntityContainerMapping
, который internal
. Насколько я понимаю, этот класс должен быть представлением времени выполнения MSL = отображение между хранилищем и концептуальной моделью.
Если вы используете отладчик, вы можете исследовать экземпляр и найти информацию о сопоставлении между свойствами и столбцами (его достаточно глубокое вложение), поэтому вы также можете использовать отражение, чтобы получить их, но это отражение непубличного интерфейса классов, которые вы используете. не является таковым, поэтому любое исправление / исправление / обновление .NET Framework может сломать ваше приложение.