zoukankan      html  css  js  c++  java
  • Entity Framework如何得到数据库表的名字

    在Entity Framework中,有时我们想要得到真正的数据库表的名称,可以通过Metadata来得到。

    直接上代码:

    View Code
     1 static void Main(string[] args)
     2         {
     3             using (BreakAwayEntities context = new BreakAwayEntities())
     4             {
     5                 var metadata = context.MetadataWorkspace;
     6                 var tables = metadata.GetItemCollection(DataSpace.SSpace)
     7                     .GetItems<EntityContainer>().Single().BaseEntitySets.OfType<EntitySet>()
     8                     .Where(s => !s.MetadataProperties.Contains("Type")
     9                         || s.MetadataProperties["Type"].ToString() == "Tables");
    10 
    11                 foreach (var table in tables)
    12                 {
    13                     var tableName = table.MetadataProperties.Contains("Table") && table.MetadataProperties["Table"].Value != null
    14                       ? table.MetadataProperties["Table"].Value.ToString()
    15                       : table.Name;
    16 
    17                     var tableSchema = table.MetadataProperties["Schema"].Value.ToString();
    18 
    19                     Console.WriteLine(tableSchema + "." + tableName);
    20                 }
    21                 Console.Read();
    22                
    23             }
    24         }
    25     }

    首先我们要得到要得到该context的metadata信息,

    View Code
    1 var metadata = context.MetadataWorkspace;

    然后我们要得到SSDL部分类型为EntitySet的那部分信息,

    View Code
    1 metadata.GetItemCollection(DataSpace.SSpace)
    2                     .GetItems<EntityContainer>().Single().BaseEntitySets.OfType<EntitySet>()

    我们来看一下这部分信息的组成:

    EntitySet部分包含了数据库中表的信息和视图的信息,在这里我们只需要数据库表的信息,所以要做一下过滤:

    View Code
    1 .Where(s => !s.MetadataProperties.Contains("Type")
    2                         || s.MetadataProperties["Type"].ToString() == "Tables");

    该方法同样适用于DBContext,只需将

    View Code
    1 var metadata = context.MetadataWorkspace;

    改为

    View Code
  • 相关阅读:
    python selenium
    selenium 遇到chrome 弹出是否保存密码框
    selenium实现在新窗口打开链接
    linux 查看日志
    Selenium+Python :WebDriver设计模式( Page Object )
    Python Logging模块的简单使用
    【工作感悟】——员工因公司而加入,却因中层管理而离开
    【工作感悟】——如何协调人与事?
    J2EE的十三个技术——EJB之消息驱动JMS
    J2EE的十三个技术——EJB之实体Bean
  • 原文地址:https://www.cnblogs.com/douqiumiao/p/2475378.html
Copyright © 2011-2022 走看看