Определите, является ли данное свойство свойством Navigation - PullRequest
0 голосов
/ 27 ноября 2018

Я пишу код для сопоставления определенных свойств от одного объекта другому, кроме Навигационных свойств.

Мой код выглядит примерно так:

var properties = typeof(TOne).GetProperties();

var t = new TOne();
foreach (var prop in properties)
{
    var skip = exempt == null || (exempt != null && exempt.Contains(prop.Name));

    if (!skip &&  CommonHelper.HasProperty(obj, prop.Name))
    {           
        var _prop = obj.GetType().GetProperty(prop.Name);                    
        CommonHelper.SetPropValue(t, prop.Name, _prop.GetValue(obj, null));                    
    }
}

Я хотел бы пропустить все навигационные свойства (не хочу копировать объект, но примитивные типы).

Например:

class Person {
    public int Id { get; set; }

    [ForeignKey("DetailId")]
    public Detail Detail { get; set; }

    public int DetailId { get; set; }
}

Я хочу скопировать DetailId но не объект Detail .

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

В структуре сущностей столбцы таблиц представлены не виртуальными свойствами.Виртуальные свойства представляют отношения между таблицами (один ко многим, многие ко многим, ...)

Вы должны были определить свое свойство Detail как виртуальное свойство.В конце концов, это не настоящий элемент Detail в ваших таблицах.

После того, как вы объявили все реляционные свойства виртуальными, вам нужно будет только обработать не виртуальные свойства.

См. Как узнать, является ли свойство виртуальным

0 голосов
/ 27 ноября 2018

Спасибо Эрик Х .

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

object valueOfProperty = ...
if(Convert.GetTypeCode(valueOfProperty) != TypeCode.Object){
   // Do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...