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
  • 相关阅读:
    #include <functional>
    3.3内联函数
    如何查看内存占用和运行速度
    属性和方法的动态绑定和限制
    __slots__节约空间
    函数进阶之一等对象
    python继承之super
    python的方法VSjava方法
    python面向对象基础(三)内置方法 __xx__
    python面向对象基础(二)反射
  • 原文地址:https://www.cnblogs.com/douqiumiao/p/2475378.html
Copyright © 2011-2022 走看看