我正在尝试动态构建一个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是什么以及为什么我的模型是在这个空间构建的。
如果有人能对此有所了解,我将不胜感激
继@ 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];
答案 0 :(得分:0)
MetadataWorkspace
指示DataSpace
指定的几个容器。对你有意思的是: