2013-04-11 63 views
4

我試圖獲取實體的SQL表名。 當我使用MetadataWorkspace查詢時,我從對象或存儲空間獲取大量信息。但是模式名稱和表名不存在。如何通過程序從實體獲取帶有模式名稱的數據庫表名稱

我試着查詢CSpace和SSpace的所有EntityType對象,我可以看到正確列出但我不知道如何從CSpace獲取SSpace。

所以說我有一個名爲User的對象模型中的類型 - 如何在數據庫中找到具有模式名稱(tkp.User)的表名?

有沒有辦法做到這一點?

回答

7

沒有perfect答案,但這應該工作...

var ssSpaceSet = objectContext.MetadataWorkspace 
    .GetItems<EntityContainer>(DataSpace.SSpace).First() 
    .BaseEntitySets 
    .First(meta => meta.ElementType.Name == "YourEntityName"); 

如果你在調試器查找,Table屬性應該有真正的表名。

你需要在最後一部分使用reflection
好消息是它應該透明地EF6工作太 (因爲它有一個類似的基類)

(它是schema類似,應該在那裏也 - 這是space爲DB/SQL映射名,面等)

看到這個職位我的許多細節
Get Model schema to programmatically create database using a provider that doesn't support CreateDatabase


Get Model schema to programmatically create database using a provider that doesn't support CreateDatabase
How I can read EF DbContext metadata programmatically?
How check by unit test that properties mark as computed in ORM model?
Programmatic data transformation in EF5 Code First migration
Entity Framework MigrationSqlGenerator for SQLite
http://entityframework.codeplex.com/
Entity Framework - Get Table name from the Entity
ef code first: get entity table name without dataannotations
Get Database Table Name from Entity Framework MetaData
http://www.codeproject.com/Articles/350135/Entity-Framework-Get-mapped-table-name-from-an-ent

+0

非常感謝你。我通過Schema屬性找到了模式名稱。 – PaulP 2013-04-11 11:31:18

+0

不客氣,Paul – NSGaga 2013-04-11 11:34:31

+0

如何從簡單的DbContext獲取模式名稱? – 2014-08-04 08:21:28

相關問題