【发布时间】:2011-09-05 20:15:01
【问题描述】:
我正在尝试动态构造一条 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) 检索了我感兴趣的实体,这使我可以访问属性,但是属性的任何属性都没有给我映射的 db 列的名称,由 HasColumnName 指定。
我也不清楚 DataSpace.OSpace 是什么以及为什么我的模型是在这个空间中构建的。
如果有人能对此有所了解,我将不胜感激
更新
进一步了解@Ladislav 的 cmets。我发现我可以得到如下信息 对于类属性
ctx.MetadataWorkspace.GetItem<ClrEntityType>("MyDomain.TestEntity", DataSpace.OSpace)).Members
表格属性
ctx.MetadataWorkspace.GetItem<EntityType>("CodeFirstDatabaseSchema.TestEntity",SSpace).Members
因此,鉴于我只知道类型 MyDomain.TestEntity 和 Memeber“名称”。我将如何获得“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];
【问题讨论】:
-
ClrEntityType 在 System.Data.Entity 内部。你怎么打这个电话?反射?
标签: entity metadata entity-framework-4.1