Getting mapped column names of properties in entity framework

前端 未结 2 1185
天涯浪人
天涯浪人 2020-12-15 10:32

in my project I use Entity Framework 6. I have these entities:

   public class Person
    {
        [Key]
        public int Id { get; set; }

        public         


        
2条回答
  •  太阳男子
    2020-12-15 10:53

    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.

提交回复
热议问题