Получить примитивные, сложные, ArrayEnumerable типы - PullRequest
3 голосов
/ 07 мая 2010

У меня есть отдельный класс для каждой из моих сущностей базы данных, и когда я создаю объект своего класса для ссылки на свойства класса, он возвращает циклическую ссылку, которая также содержит свойства других сущностей, которые связаны через FK ...чтобы удалить циклическую ссылку, я хочу сначала сделать копию объекта с помощью копии «context proxy object», а затем получить примитивные, сложные, arrayEnumerable типы этого объекта и удалить эти типы из объекта, а затем объект будет возвращенвеб-сервис ....

1 Ответ

0 голосов
/ 16 апреля 2011

Звучит как рекурсивный неглубокий клон. Я использовал следующее, но только на один уровень глубиной.

public static class EntityBaseExtensions
{
    /// <summary>
    /// Description:    Creates a non-recursive shallow copy of an entity, only including public instance properties decorated with ColumnAttribute.
    ///                 This will return an object without entity references.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="source"></param>
    /// <returns>A non-recursive shallow copy of a LINQ entity</returns>
    public static T ShallowClone<T>(this T source) where T : EntityBaseClass
    {
        // create an object to copy values into
        T destination = Activator.CreateInstance<T>();

        // get source and destination property infos for all public instance
        PropertyInfo[] sourcePropInfos = source.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
        PropertyInfo[] destinationPropInfos = source.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (PropertyInfo sourcePropInfo in sourcePropInfos)
        {
            if (Attribute.GetCustomAttribute(sourcePropInfo, typeof(ColumnAttribute), false) != null)
            {
                PropertyInfo destPropInfo = destinationPropInfos.Where(pi => pi.Name == sourcePropInfo.Name).First();

                destPropInfo.SetValue(destination, sourcePropInfo.GetValue(source, null), null);
            }
        }

        return destination;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...