我正在尝试动态构建 SQL 语句。
我的上下文是动态创建的,使用从 EntityTypeConfiguration 派生的反射查找类并将它们添加到 DbModelBuilder.Configuration。
我的 EntityTypeConfiguration 类指定 HasColumnName 将实体属性名称映射到 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 的评论。我发现我可以得到如下信息
对于类属性
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
指定的几个容器.对你来说有趣的是:
关于Entity Framework 4.1 动态检索映射列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6193979/