2013-09-19 3 views
1

Используя Entity Framework 5, сначала укажите базу данных.Получить тип данных столбца из Entity Framework Entity

Возможно ли (во время выполнения) получить тип данных столбца базы данных, который представляет собой свойство объекта? Тип .net также отлично работает, если это проще.

IEnumerable<DbEntityEntry> entities = 
    context.ChangeTracker.Entries() 
      .Where(
       e => 
       e.State == EntityState.Added || e.State == EntityState.Modified); 

foreach (DbEntityEntry entity in entities) 
{ 
    foreach (string propertyName in entity.CurrentValues.PropertyNames) 
    { 
    //so I know the entity and the property name. Can I get the data type? 
    } 
} 

ответ

1

Используйте отражение на объекте, чтобы получить информацию о недвижимости.

foreach (DbEntityEntry entity in entities) 
{ 
    foreach (string propertyName in entity.CurrentValues.PropertyNames) 
    { 
     var propertyInfo = entity.Entity.GetType().GetProperty(propertyName); 
     var propertyType = propertyInfo.PropertyType; 

    } 
} 
2

Чтобы получить тип данных конкретного столбца таблицы:

[Предположим: Entity имя класса проп: вендоры и имя столбца = "VendorID"]

string columnTypName = (context.Vendors.EntitySet.ElementType.Members["VendorID"].TypeUsage.EdmType).Name; 

Чтобы динамически получить имена столбцов и тип столбцов:

[Param: table Название]

var columns = from meta in ctx.MetadataWorkspace.GetItems(DataSpace.CSpace) 
             .Where(m => m.BuiltInTypeKind == BuiltInTypeKind.EntityType) 
         from p in (meta as EntityType).Properties 
         .Where(p => p.DeclaringType.Name == tableName) 
         select new 
         { 
          colName = p.Name, 
          colType = p.TypeUsage.EdmType.Name 
         }; 
+0

У меня ошибка в 'EntitySet'. "не содержит определения для EntitySet" –

Смежные вопросы