Я попытался клонировать объект, используя 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.
Временное решение, используемое в настоящий момент
Я вернул новые экземпляры обоих объектов со значениями нанесено на карту вручную. Также я знаю, что могу go для глубокого клонирования, сериализовав значение в поток памяти. Но я предпочитаю, если смогу найти лучший способ от подхода memberWiseClone
.
Заранее спасибо!