3

Entity Framework 5 を使用して、データベースを最初に使用します。

エンティティのプロパティが表すデータベース列のデータ型を (実行時に) 取得することはできますか? それがより簡単であれば、.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?
   }
}
4

2 に答える 2

2

テーブルの特定の列のデータ型を取得するには:

[想定: エンティティ prop クラス名: Vendors および列名 ="VendorID"]

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

すべての列名と列の型を動的に取得するには:

[パラメータ: テーブル名]

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
                       };
于 2014-03-20T23:56:12.867 に答える
2

エンティティのリフレクションを使用して、プロパティ情報を取得します。

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

    }
}
于 2013-09-19T18:01:19.573 に答える