实体框架4.1动态检索映射的列名

问题描述

| 我试图动态构造一个sql语句。 我的上下文是动态创建的,使用从EntityTypeConfiguration派生的反射查找类并将它们添加到DbModelBuilder.Configuration中。 我的EntityTypeConfiguration类指定HasColumnName来将Entity属性名映射到db表列名,这是我需要构造sql语句的。
namespace MyDomain {
    public class TestEntityConfig : EntityTypeConfiguration<TestEntity>{
        Property(\"Name\").HasColumnName(\"dbname\");
    } 
 }
根据我的研究,看来我可以通过MetadataWorkspace访问此信息,而我可以通过ObjectContext进行访问。 我已经设法通过MetadataWorkspace.GetItem(\“ MyDomain.TestEntity \”,DataSpace.OSpace)检索到我感兴趣的实体,这使我可以访问Properties,但是Properties的所有属性都不给我名称由HasColumnName指定的映射数据库列的大小。 我也不清楚什么是DataSpace.OSpace,以及为什么在此空间中构造我的模型。 如果有人能对此有所启示,我将不胜感激 更新 除了@Ladislav的评论。我发现我可以获得以下信息 对于类属性
ctx.MetadataWorkspace.GetItem<ClrEntityType>(\"MyDomain.TestEntity\",DataSpace.OSpace)).Members
对于表属性
ctx.MetadataWorkspace.GetItem<EntityType>(\"CodeFirstDatabaseSchema.TestEntity\",sspace).Members
因此,鉴于我只知道MyDomain.TestEntity和Memeber类型的\“ Name \”。我将如何获得\“ 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];
    

解决方法

        tan4ѭcontanis
DataSpace
指定的几个容器。您感兴趣的是: CSpace-概念模型的描述(应包含属性) CSSpace-概念模型到存储模型的映射(这应该包含如何将类/属性映射到表/列)