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
1 var metadata = ((IObjectContextAdapter)context).ObjectContext.MetadataWorkspace;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM