Я пытаюсь построить оператор SQL динамически.
Мой контекст создается динамически, с использованием классов поиска отражений, полученных из EntityTypeConfiguration, и добавления их в DbModelBuilder.Configuration.
Мои классы EntityTypeConfiguration указывают значение HasColumnName, чтобы сопоставить имя свойства Entity с именем столбца таблицы БД, которое мне нужно для построения оператора SQL.
namespace MyDomain {
public class TestEntityConfig : EntityTypeConfiguration<TestEntity>{
Property("Name").HasColumnName("dbName");
}
}
Из того, что я исследовал, кажется, что я могу получить доступ к этой информации через MetadataWorkspace, к которому я могу получить доступ через ObjectContext.
Мне удалось получить интересующую меня сущность с помощью MetadataWorkspace.GetItem («MyDomain.TestEntity», DataSpace.OSpace), который дает мне доступ к свойствам, но ни одно из свойств Properties не дает мне имя сопоставленного столбца БД, как указано в HasColumnName.
Также мне не ясно, что такое DataSpace.OSpace и почему моя модель построена в этом пространстве.
Если кто-нибудь сможет пролить свет на это, я был бы признателен
UPDATE
В дополнение к комментариям @ Ladislav. Я обнаружил, что могу получить информацию следующим образом
Для свойств класса
ctx.MetadataWorkspace.GetItem<ClrEntityType>("MyDomain.TestEntity", DataSpace.OSpace)).Members
Для свойств таблицы
ctx.MetadataWorkspace.GetItem<EntityType>("CodeFirstDatabaseSchema.TestEntity",SSpace).Members
Итак, учитывая, что я знаю только тип MyDomain.TestEntity и Memeber «Имя». Как бы я пошел, чтобы получить "dbName". Могу ли я всегда предполагать, что мой сопоставленный класс будет создан в CodeFirstDatabaseSchema, для динамического создания идентификатора, чтобы извлечь его из SSpace, и как мне получить правильный член в SSpace. Могу ли я сделать что-то вроде
var memIndex = ctx.MetadataWorkspace.GetItem<ClrEntityType>("MyDomain.TestEntity", DataSpace.OSpace)).Members["Name"].Index;
var dbName = ctx.MetadataWorkspace.GetItem<EntityType>("CodeFirstDatabaseSchema.TestEntity",SSpace).Members[memIndex];