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
  • 相关阅读:
    C++函数参数传参的本质解析
    C#值类型和引用类型详解
    C#学习笔记(转换)
    C#学习笔记(泛型)
    # Java反射2——获取实体所有属性和方法,并对属性赋值
    Java反射1——扫描某个包下的所有类
    JSR教程2——Spring MVC数据校验与国际化
    JSR教程1——JSR 303
    Github如何撤销提交并清除痕迹
    论文第5章:Android绘图平台的实现
  • 原文地址:https://www.cnblogs.com/douqiumiao/p/2475378.html
Copyright © 2011-2022 走看看