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
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.
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.
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;
}
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;