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

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

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

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

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

Я не могу назначить объект типа MyObjectProxy to 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 Ответ

0 голосов
/ 17 мая 2019

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

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

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