in my project I use Entity Framework 6. I have these entities:
public class Person
{
[Key]
public int Id { get; set; }
public
For EF6 I could only find the mappings in DataSpace.CSSpace (EntityTypeMapping will map entities to tables, and ScalarPropertyMapping will map scalar properties to columns):
using System.Data.Entity.Core.Mapping;
using System.Data.Entity.Core.Metadata.Edm;
// ...
using ( var db = new YourContext() )
{
var metadataWorkspace = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)db)
.ObjectContext.MetadataWorkspace;
var itemCollection = ((StorageMappingItemCollection)metadataWorkspace
.GetItemCollection(DataSpace.CSSpace));
var entityMappings = itemCollection.OfType().Single()
.EntitySetMappings.ToList();
var entityMapping = (EntityTypeMapping)entityMappings
.Where(e => e.EntitySet.ElementType.FullName == typeof(TEntity).FullName)
//or .Where(e => e.EntitySet.ElementType.Name == "YourEntityName")
.Single().EntityTypeMappings.Single();
var fragment = entityMapping.Fragments.Single();
var dbTable = fragment.StoreEntitySet;
Console.WriteLine($"Entity {entityMapping.EntityType.FullName} is mapped to table [{dbTable.Schema}].[{dbTable.Name}]");
var scalarPropsMap = entityMapping.Fragments.Single()
.PropertyMappings.OfType();
foreach(var prop in scalarPropsMap)
Console.WriteLine($"Property {prop.Property.Name} maps to Column {prop.Column.Name}");
}
Out of curiosity I use the code above because System.Data.SqlClient.SqlBulkCopy requires mapping between entity properties and table columns.