当前位置 : 主页 > 网络推广 > seo >

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

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在尝试动态构造一个SQL语句. 我的上下文是动态创建的,使用从EntityTypeConfiguration派生的反射查找类并将它们添加到DbModelBuilder.Configuration. 我的EntityTypeConfiguration类指定HasColumnName将实
我正在尝试动态构造一个SQL语句.

我的上下文是动态创建的,使用从EntityTypeConfiguration派生的反射查找类并将它们添加到DbModelBuilder.Configuration.

我的EntityTypeConfiguration类指定HasColumnName将实体属性名称映射到db table列名,我需要构建我的SQL语句.

namespace MyDomain {
    public class TestEntityConfig : EntityTypeConfiguration<TestEntity>{
        Property("Name").HasColumnName("dbName");
    } 
 }

从我所研究的内容来看,似乎我可以通过MetadataWorkspace访问这些信息,我可以通过ObjectContext获取.

我已经设法使用MetadataWorkspace.GetItem(“MyDomain.TestEntity”,DataSpace.OSpace)检索我感兴趣的实体,这使我可以访问属性,但属性的所有属性都没有给我我的名字.映射的db列,与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“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];
MetadataWorkspace是由DataSpace指定的几个容器.有趣的是:

> CSpace – 概念模型的描述(这应该包含属性)> CSSpace – 概念模型到存储模型的映射(这应该包含类/属性如何映射到表/列)

网友评论