Как клонировать объект с виртуальными навигационными свойствами в нем, используя memberWiseClone в c# - PullRequest
0 голосов
/ 27 мая 2020

Я попытался клонировать объект, используя memberWiseClone(). Он успешно клонирует все свойства типа значения, но не будет клонировать свойства ссылочного типа.

Класс, который я пытаюсь клонировать.

    public class Document
    {
        public int OwnerId { get; set; }

        public int DocumentManagerId { get; set; }

        public virtual User DocumentManager { get; set; }

        public Document ShallowCopy()
        {
            return (Document)this.MemberwiseClone();
        }
    }

Получение всех правильных значений для * В моем методе обновления класса обслуживания вызывается 1007 * и DocumentManagerId, кроме DocumentManager

shallowCopy(). (Сохранение состояния предыдущего документа в журнале после фактического обновления документа)

var document = await this.dbContext.Documents.FirstOrDefaultAsync(x => x.id == documentDto.id);
var prevDocument = document.ShallowCopy();

Я получаю правильный результат для document.DocumentManager, но не получаю его для prevDocument.DocumentManager. Следовательно, это не должно происходить из-за каких-либо конфигураций сопоставления сущностей. Я хочу знать, почему виртуальный объект выдает исключение, когда memberWiseCloning.

Exception for documentManager property

Временное решение, используемое в настоящий момент

Я вернул новые экземпляры обоих объектов со значениями нанесено на карту вручную. Также я знаю, что могу go для глубокого клонирования, сериализовав значение в поток памяти. Но я предпочитаю, если смогу найти лучший способ от подхода memberWiseClone.

Заранее спасибо!

...