Как Fluent NHibernate удается получить ссылку на свойство, используя эти странные делегаты? - PullRequest
1 голос
/ 21 марта 2010

Например, если я хочу отобразить свойство Title, которое я использую:

> Map(x => x.Title);

Это странно, потому что этот делегат возвращает только значение свойства, а не само свойство, покаNHibernate должен знать само свойство .

Как это работает?

1 Ответ

3 голосов
/ 21 марта 2010

Карта - это функция, которая (помимо прочего через перегрузки) принимает Expression<Func<T>> - т.е. она выглядит как Func<T>, но Expression<Func<T>> преобразуется в дерево выражений, а не только в лямбду.

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

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

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