entity-framework - 如何在运行时从 DbContext 获取表名

标签 entity-framework entity-framework-4 entity-framework-4.1

我试图在运行时从 DbContext 获取数据库表名,我发现 posts谈论在 EF 4.x 中不可能获取 SSpace 项(以及表名),默认情况下还没有用于这些操作的公共(public) API。

但我尝试对此进行一些测试,并且我能够在运行时使用调试器从 DbContext 获取表名

此语法由 Visual Studio 生成

((System.Data.Entity.DbContext)(context)).System.Data.Entity.Infrastructure.IObjectContextAdapter.ObjectContext.MetadataWorkspace._itemsSSpace

我做了一些修改以使其在代码中可用,并屈服于此

var objContext = (context as IObjectContextAdapter).ObjectContext;
var metaData = objContext.MetadataWorkspace;
var items = metaData.GetItems(DataSpace.SSpace);

虽然它遵循相同的目标,但 items 抛出异常 The space 'SSpace' has no associated collection.

  • 首先:为什么会出现这个错误。
  • 第二:有什么办法可以得到这个SSpcae项,或者表名??

最佳答案

这是运行时的一种方式。

        public static List<string> GetTableNames()
    {
        List<string> tableNameList = new List<string>();
        // use DBContext to get ObjectContext
        DatabaseContext db = new DatabaseContext();
        IObjectContextAdapter adapter = db as IObjectContextAdapter;
        System.Data.Objects.ObjectContext objectContext = adapter.ObjectContext;

        ReadOnlyCollection<EntityType> allTypes = objectContext.MetadataWorkspace.GetItems<EntityType>(DataSpace.CSpace);
        foreach (EntityType item in allTypes)
        {
            // Create full assembly name
            string typeName = "original.poco.namespace." + item.Name;
            Type type = Type.GetType(typeName);

            // wrap into a function
            string sql = db.Set(type).ToString();
            Regex regex = new Regex(@"FROM \[dbo\]\.\[(?<table>.*)\] AS");
            Match match = regex.Match(sql);
            tableNameList.Add( match.Groups["table"].Value);
        }

        return tableNameList;
    }

关于entity-framework - 如何在运行时从 DbContext 获取表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275811/

相关文章:

linq-to-sql - 现在已经发布Entity Framework 4.0了吗?转储Linq-To-Sql吗?

asp.net-mvc-3 - MVC3 模型 View 问题与具有 2 个外键到同一个表的模型

.net - EF 有订购的集合吗?相当于 NHibernate Bag Vs Set Vs List 世界中的 list

asp.net-mvc - 缓存直到 ASP.NET MVC 和 Entity Framework 4.1 中的数据更改

c# - 如何在 MVC3 和 Entity Framework 上使用 Code First 向我的数据库添加另一个表?

c# - EF Core 中的 .WillCascadeOnDelete(false) 等价物是什么?

.net - EF4 生成数据库

c# - 当我从 ApplicationDbContext 调用时外键对象返回 null

entity-framework - 首先从数据库模型自动更新代码,这可能吗?

c# - 一般从 Entity Framework 返回一个项目