Entity Framework: Check all relationships of an entity for foreign key use

后端 未结 4 795
广开言路
广开言路 2020-12-29 11:20

I have an entity, let\'s call it CommonEntity that has a primary key used as a foreign key in many other entities. As the application is developed these links w

4条回答
  •  灰色年华
    2020-12-29 12:01

    You can use Reflection for this (if you don't want use "Fail Delete On SQL") I write this because I dont want to DELETE Entity, just want to know if its related to any or not !

     public static object GetEntityFieldValue(this object entityObj, string propertyName)
            {
                var pro = entityObj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).First(x => x.Name == propertyName);
                return pro.GetValue(entityObj, null);
    
            }
    
     public static IEnumerable GetManyRelatedEntityNavigatorProperties(object entityObj)
            {
                var props = entityObj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(x => x.CanWrite && x.GetGetMethod().IsVirtual && x.PropertyType.IsGenericType == true);
                return props;
            }
    
    public static bool HasAnyRelation(object entityObj)
            {
    
                    var collectionProps= GetManyRelatedEntityNavigatorProperties(entityObj);
    
    
                    foreach (var item in collectionProps)
                    {
                        var collectionValue = GetEntityFieldValue(entityObj,item.Name);
                        if (collectionValue != null && collectionValue is IEnumerable)
                        {
                            var col = collectionValue as IEnumerable;
                            if (col.GetEnumerator().MoveNext())
                            {
                                return true;
                            }
    
                        }
                    }
                   return false;
    }
    

    NOTE that : Context must not Disposed and Proxy Must Be Enabled AND KNOW THAT IT WILL GET ALL RELATED RECORD TO MEMORY (IT'S Too Heavy)

提交回复
热议问题