簡單:我如何從DbEntityEntry對象映射表的名字嗎?我在擴展DbContext的類中。我見過ObjectContext的例子,但不適用於CF.獲取表名從DbEntityEntry(代碼優先)
謝謝。
簡單:我如何從DbEntityEntry對象映射表的名字嗎?我在擴展DbContext的類中。我見過ObjectContext的例子,但不適用於CF.獲取表名從DbEntityEntry(代碼優先)
謝謝。
如另一個答案所述,可以使用本IObjectContextAdapter
private string GetTableName(DbEntityEntry ent)
{
ObjectContext objectContext = ((IObjectContextAdapter) this).ObjectContext;
Type entityType = ent.Entity.GetType();
if (entityType.BaseType != null && entityType.Namespace == "System.Data.Entity.DynamicProxies")
entityType = entityType.BaseType;
string entityTypeName = entityType.Name;
EntityContainer container =
objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace);
string entitySetName = (from meta in container.BaseEntitySets
where meta.ElementType.Name == entityTypeName
select meta.Name).First();
return entitySetName;
}
上面的代碼還測試對於代理來獲得表名。希望這可以幫助到達這個鏈接的其他人,因爲我認爲很久以前原始海報就解決了這個問題。
實際上,您可以從DbContext
獲得ObjectContext
(通過將其轉換爲IObjectContextAdapter
)並使用您見過的示例。
在msdn你可以找到的文檔的DbContext,那裏你可以看到,它明確地實現IObjectContextAdapter,投下您的DbContext,獲得語境IObjectContextAdapter和使用ObjectContext的財產。
我如何獲得實體名稱? –
我發現了一個更清潔的方式在msdn擺脫代理的名字。
private string GetTableName(DbEntityEntry ent)
{
return ObjectContext.GetObjectType(entry.Entity.GetType()).Name;
}
這隻得到實體名稱而不是表名,只是FYI。 –
@PhilSandler你是對的,我怎樣才能得到表名? – tkt986
看到這裏如何獲得表名http://romiller.com/2014/04/08/ef6-1-mapping-between-types-tables/ (假設EF 6.1) – Quails4Eva