How to get first EntityKey Name for an Entity in EF4

后端 未结 4 1263
死守一世寂寞
死守一世寂寞 2021-02-06 15:21

How can I get the 1st EntityKey name for an Entity for Entity Framework 4 because I\'m building a repository system and I wanted to get an item by Id (which is the primary key o

相关标签:
4条回答
  • 2021-02-06 15:36

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

    I know it looks too much but u I wanted to get it by having the Entity Name.

    0 讨论(0)
  • 2021-02-06 15:56

    Try this:

    /// <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);
    }
    

    objectsource is objectcontext.

    0 讨论(0)
  • 2021-02-06 15:57
    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;
    
       }
    
    0 讨论(0)
  • 2021-02-06 16:02

    You can get the Entity Key members collection from MetaDataWorkspace using the following code:

    ReadOnlyCollection keyMembers = db.MetadataWorkspace.GetType("", "Entity_Namespace", System.Data.Metadata.Edm.DataSpace.CSpace).MetadataProperties["KeyMembers"].Value as ReadOnlyCollection;

    0 讨论(0)
提交回复
热议问题