How to get ObjectSet's entity key name?

后端 未结 7 1422
悲哀的现实
悲哀的现实 2020-12-29 00:08

I\'ve created a generic ObjectSet in my generic repository.

What I would like to get is the name of the EntityKey of ObjectS

7条回答
  •  盖世英雄少女心
    2020-12-29 00:47

    Tested with EF 6.

    It will return an array of objects for each primary key value for the given DbEntityEntry.

    Their maybe edge cases where this does not work - but for my simple needs works great.

    Hope this helps someone else.

    object[] GetPrimaryKeyValue(DbEntityEntry entry)
    {
        List key = new List();
    
        var objectStateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity);
        if (objectStateEntry.EntityKey.EntityKeyValues != null && objectStateEntry.EntityKey.EntityKeyValues.Length==1)
        {
            key.Add(objectStateEntry.EntityKey.EntityKeyValues[0].Value);
        }
        else
        {
            if (objectStateEntry.EntitySet.ElementType.KeyMembers.Any())
            {
                foreach (var keyMember in objectStateEntry.EntitySet.ElementType.KeyMembers)
                {
                    if (entry.CurrentValues.PropertyNames.Contains(keyMember.Name))
                    {
                        var memberValue = entry.CurrentValues[keyMember.Name];
                        if (memberValue != null)
                        {
                            key.Add(memberValue);
                        }
                    }
                }
            }
        }
        return key.ToArray();
    }
    
        

    提交回复
    热议问题