问题描述
|
我试图动态构造一个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-概念模型到存储模型的映射(这应该包含如何将类/属性映射到表/列)