【发布时间】:2016-05-22 19:45:06
【问题描述】:
简单:如何从 DbEntityEntry 对象中获取映射表名称?我在一个扩展 DbContext 的类中。我看过 ObjectContext 的示例,但不适用于 CF。
谢谢。
【问题讨论】:
标签: c# entity-framework ef-code-first
简单:如何从 DbEntityEntry 对象中获取映射表名称?我在一个扩展 DbContext 的类中。我看过 ObjectContext 的示例,但不适用于 CF。
谢谢。
【问题讨论】:
标签: c# entity-framework ef-code-first
如另一个答案所述,可以使用 IObjectContextAdapter 获取表名
private string GetTableName(DbEntityEntry ent)
{
ObjectContext objectContext = ((IObjectContextAdapter) this).ObjectContext;
Type entityType = ent.Entity.GetType();
if (entityType.BaseType != null && entityType.Namespace == "System.Data.Entity.DynamicProxies")
entityType = entityType.BaseType;
string entityTypeName = entityType.Name;
EntityContainer container =
objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace);
string entitySetName = (from meta in container.BaseEntitySets
where meta.ElementType.Name == entityTypeName
select meta.Name).First();
return entitySetName;
}
上面的代码还测试了代理。希望这对访问此链接的其他人有所帮助,因为我认为原始海报很久以前就解决了这个问题。
【讨论】:
我在msdn 找到了一种更简洁的方法来删除代理名称。
private string GetTableName(DbEntityEntry ent)
{
return ObjectContext.GetObjectType(entry.Entity.GetType()).Name;
}
【讨论】:
实际上,您可以从DbContext 获取ObjectContext(通过将其转换为IObjectContextAdapter)并使用您看到的示例。
【讨论】:
在msdn 上,您可以找到 DbContext 的文档,在那里您可以看到它显式地实现了 IObjectContextAdapter,因此将您的 DbContext 派生上下文转换为 IObjectContextAdapter 并使用 ObjectContext 属性。
【讨论】: