如何解决实体框架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-概念模型到存储模型的映射(这应该包含如何将类/属性映射到表/列)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。