Как получить первое имя EntityKey для сущности в EF4 - PullRequest
4 голосов
/ 27 июля 2010

Как я могу получить 1-е имя EntityKey для Entity for Entity Framework 4, потому что я строю систему репозитория, и я хотел получить элемент по Id (который является первичным ключом, или EF - 1-й ключ entity для объекта) )

Я использую этот код

public virtual TEntity GetById(string keyName, Guid entityId)
        {
            var entityKey = new EntityKey(this.QualifiedEntitySetName, keyName, entityId);
            object entity;
            return this.Context.TryGetObjectByKey(entityKey, out entity) ? entity as TEntity : null;
        }

Я хочу получить динамическое имя ключа сущности. Кто-нибудь может мне помочь с этим вопросом?

Ответы [ 4 ]

5 голосов
/ 28 июля 2010

var keyName = this.Context .MetadataWorkspace .GetEntityContainer (this.Context.DefaultContainerName, DataSpace.CSpace) .BaseEntitySets .First (meta => meta.ElementType.Name == this.entityName) .EleeyMepe..k => k.Name) .FirstOrDefault ();

Я знаю, что это выглядит слишком много, но вы хотели получить его, имея имя сущности.

2 голосов
/ 15 июня 2011

Попробуйте это:

/// <summary>
/// Gets the entity key for the POCO Entity type.
/// </summary>
/// <param name="entity">The entity.</param>
/// <returns></returns>
private EntityKey GetEntityKey(TEntity entity)
{
    ReadOnlyMetadataCollection<EdmMember> keyMembers =
        this.ObjectSet.EntitySet.ElementType.KeyMembers;

    var entityKeyMembers = new List<EntityKeyMember>();

    //Construct the entity key for the POCO Entity type object.
    foreach (EdmMember keyMember in keyMembers)
    {
        object keyMemberValue = entity.GetType().GetProperty(keyMember.Name).GetValue(entity, null);
        entityKeyMembers.Add(new EntityKeyMember(keyMember.Name, keyMemberValue));
    }

    //Create the Entity key for our POCO Entity type object.
    return new EntityKey(this.ObjectSource.DefaultContainerName
        + "." + this.ObjectSet.EntitySet.Name, entityKeyMembers);
}

objectource это objectcontext.

2 голосов
/ 27 июля 2010

Вы можете получить коллекцию членов Entity Key из MetaDataWorkspace, используя следующий код:

<code>ReadOnlyCollection keyMembers = db.MetadataWorkspace.GetType("", "Entity_Namespace", System.Data.Metadata.Edm.DataSpace.CSpace).MetadataProperties["KeyMembers"].Value as ReadOnlyCollection;
0 голосов
/ 26 июня 2014
public static string GetPrimaryKeyName(this object entity)
   {
       var prop = entity.GetType().GetProperties().Where(x =>x.GetCustomAttributes(false).Where(y => y is ColumnAttribute&&((ColumnAttribute)y).IsPrimaryKey == true).Any()).FirstOrDefault();
          if (prop != null)
              return prop.Name;
          return string.Empty;

   }
...