Entity Framework 4.1 动态检索映射的列名称
我正在尝试动态构建 SQL 语句。
我的上下文是动态创建的,使用反射查找从 EntityTypeConfiguration 派生的类并将它们添加到 DbModelBuilder.Configuration 中。
我的 EntityTypeConfiguration 类指定 HasColumnName 将实体属性名称映射到数据库表列名称,这是我构建 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];
I am trying to construct an SQL statement dynamically.
My context is created dynamically, using reflection finding classes deriving from EntityTypeConfiguration and adding them to DbModelBuilder.Configuration.
My EntityTypeConfiguration classes specify HasColumnName to map the Entity property name to db table column name, which I need to construct my SQL statement.
namespace MyDomain {
public class TestEntityConfig : EntityTypeConfiguration<TestEntity>{
Property("Name").HasColumnName("dbName");
}
}
From What I have researched, it seems I can get access to this information through MetadataWorkspace, which I can get to through ObjectContext.
I have managed to retrieve the the entity I am interested in with MetadataWorkspace.GetItem("MyDomain.TestEntity",DataSpace.OSpace), which gives me access to Properties, but none of the properties, of Properties, give me the name of the mapped db column, as specified with HasColumnName.
Also I am not clear what DataSpace.OSpace is and why my model is constructed in this space.
If Anyone can shed some light on this I would be grateful
UPDATE
Further to @Ladislav's comments. I discovered I can get the information as follows
For the class properties
ctx.MetadataWorkspace.GetItem<ClrEntityType>("MyDomain.TestEntity", DataSpace.OSpace)).Members
For the table properties
ctx.MetadataWorkspace.GetItem<EntityType>("CodeFirstDatabaseSchema.TestEntity",SSpace).Members
So given that I only know the type MyDomain.TestEntity and Memeber "Name". How would I go about to get "dbName". Can I always assume that my mapped class will be created in CodeFirstDatabaseSchema, om order to dynamically construct the identity to retrieve it from SSpace and how would I get to the correct Member in SSpace. Can I do something like
var memIndex = ctx.MetadataWorkspace.GetItem<ClrEntityType>("MyDomain.TestEntity", DataSpace.OSpace)).Members["Name"].Index;
var dbName = ctx.MetadataWorkspace.GetItem<EntityType>("CodeFirstDatabaseSchema.TestEntity",SSpace).Members[memIndex];
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
MetadataWorkspace
包含由DataSpace
指定的多个容器。您感兴趣的是:MetadataWorkspace
contanis several containers specified byDataSpace
. Interesting for you are: