Установка свойства для прокси-объекта его типа с использованием отражения

Я пытаюсь использовать PropertyInfo.SetValue () на свойстве.

Я получил значение из этого же свойства с помощью PropertyInfo.GetValue ()

Свойство имеет тип MyObject .

Когда я пытаюсь использовать SetValue, я получаю исключение: «Объект не соответствует типу цели». Причина в том, что значение, которое я получил через GetValue (), имеет тип времени выполнения MyObjectProxy , который наследуется от MyObject .

Я не могу назначить объект типа MyObjectProxy свойству MyObject и не нашел способа сделать это.

Но EF Core сделал это как-то, так разве я не смогу это сделать?

//Each object that implements IProfileKey is an entity with a foreign key of myObject
List<PropertyInfo> myProperties = GetPropertiesOfType(typeof(IProfileKey));

//Get values from all properties as IProfileKey
List<IProfileKey> myValues = myProperties.Select(x => (IProfileKey)x.GetValue(myObject)).ToList(); 
myProperty.GetValue(myObject);

MyContext.Remove(ofObject);
MyContext.SaveChanges();

UpdatePrimaryKeys(myValues);

foreach(int i = 0; i < myProperties.Count; i++)
{
    //Heres the problem
    //myProperties[i] is of type MyObject, while myValues[i] is of type MyObjectProxy
    myProperties[i].SetValue(myObject, myValues[i]); 

}

MyContext.Add(myObject);
MyContext.SaveChanges();

Фоном является то, что я пытаюсь изменить первичный ключ одного из моих объектов в EF Core. Для этого мне нужно удалить объект, который я пытаюсь изменить, затем изменить ключ и добавить его снова.

Теперь у этого объекта также есть другие объекты, ссылающиеся на него, поэтому мне нужно также изменить их Ключи. Все эти другие объекты являются свойствами типа IProfileKey в моем основном объекте.

Поэтому моя идея заключалась в том, чтобы использовать дженерики для автоматического поиска и обновления этих свойств.

Всего 1 ответ


Поэтому я не понял, как назначить объект MyObjectProxy свойству MyObject.

Но при изменении первичного ключа я подумал, что мне нужно было переназначить свойства навигации, которые также изменились, но это не так, поэтому мне не нужно присваивать объект MyObjectProxy свойству MyObject в конце концов.


Есть идеи?

10000