1

エンティティの ID フィールド名 (プロパティ名) を取得しようとしていますが、可能ですか?

ユーザー user= new User(); //ユーザーはエンティティです

文字列 idField = ??????? //user.UserId

4

4 に答える 4

5
public static IEnumerable<string> GetIdFields<TEntity>() where TEntity
  : EntityObject
{
    var ids = from p in typeof(TEntity).GetProperties()
              where (from a in p.GetCustomAttributes(false)
                     where a is EdmScalarPropertyAttribute &&
                       ((EdmScalarPropertyAttribute)a).EntityKeyProperty
                     select true).FirstOrDefault()
              select p.Name;
    return ids;
}

public static string GetIdField<TEntity>() where TEntity : EntityObject
{
    IEnumerable<string> ids = GetIdFields<TEntity>();
    string id = ids.Where(s => s.Trim().StartsWith(typeof(TEntity).Name.
                  Trim())).FirstOrDefault();
    if (string.IsNullOrEmpty(id)) id = ids.First();
    return id;
}

両方の機能を 1 つにマージしたり、検索条件を設定したりできます。

于 2009-07-03T04:55:26.023 に答える
3

エンティティの EntitySet または EntityType を取得できる場合は、KeyMembers プロパティを使用できます。

public IEnumerable<string> GetIdProperties(EntitySetBase entitySet)
{
  return GetIdProperties(entitySet.ElementType);
}

public IEnumerable<string> GetIdProperties(EntityTypeBase entityType)
{
  return from keyMember in entityType.KeyMembers
         select keyMember.Name
}

コンテキストからジェネリック オブジェクト セットを取得できます。

public ObjectSet<TEntity> GetEntitySet<TEntity>(ObjectContext context)
{
    return context.CreateObjectSet<TEntity>();
}
于 2011-02-28T13:56:42.187 に答える
1

Entity Framework サポート フォーラムのこの投稿では、リフレクションを使用して ID フィールドとその詳細を検索する方法を示しています。

于 2009-07-03T03:21:08.210 に答える
0

EntityクラスはやはりSystem.Data.Objects.DataClasses.EntityObjectを継承したクラスなので、リフレクションはまだ動くと思います。

試してみましたか?エラーは出ますか?

于 2009-07-03T01:56:20.607 に答える