【问题标题】:Get Table Name From DbEntityEntry (Code-First)从 DbEntityEntry 获取表名(代码优先)
【发布时间】:2016-05-22 19:45:06
【问题描述】:

简单:如何从 DbEntityEntry 对象中获取映射表名称?我在一个扩展 DbContext 的类中。我看过 ObjectContext 的示例,但不适用于 CF。

谢谢。

【问题讨论】:

    标签: c# entity-framework ef-code-first


    【解决方案1】:

    如另一个答案所述,可以使用 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;
            }
    

    上面的代码还测试了代理。希望这对访问此链接的其他人有所帮助,因为我认为原始海报很久以前就解决了这个问题。

    【讨论】:

    【解决方案2】:

    我在msdn 找到了一种更简洁的方法来删除代理名称。

    private string GetTableName(DbEntityEntry ent)
    {
         return ObjectContext.GetObjectType(entry.Entity.GetType()).Name;
    }
    

    【讨论】:

    • 谢谢:return entry.Entity.GetType().Name.Split('_')[0];
    • 这会返回类型的名称,而不是表的名称,如 [Table("someOtherName")] 配置的那样
    【解决方案3】:

    实际上,您可以从DbContext 获取ObjectContext(通过将其转换为IObjectContextAdapter)并使用您看到的示例。

    【讨论】:

      【解决方案4】:

      msdn 上,您可以找到 DbContext 的文档,在那里您可以看到它显式地实现了 IObjectContextAdapter,因此将您的 DbContext 派生上下文转换为 IObjectContextAdapter 并使用 ObjectContext 属性。

      【讨论】:

      • 我如何获得实体名称?
      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多