Я просто погружаюсь в использование первого кода с CTP5 для Entity Framework. Чтобы облегчить задачу настройки отображений базы данных, я создал себе небольшой вспомогательный класс, который будет служить базовым классом для любых пользовательских сопоставлений, но я не могу понять, как заставить работать последний оператор в методе.
Я нахожу все открытые свойства типа Enum и затем вызываю метод .Ignore для каждого свойства, найденного в данном типе. Код использует Fasterflect для отражения и небольшой помощник ForEach, но должно быть достаточно очевидно, что делает код.
internal abstract class AbstractMappingProvider<T> : IMappingProvider where T : class
{
public EntityTypeConfiguration<T> Map { get; private set; }
public virtual void DefineModel( ModelBuilder modelBuilder )
{
Map = modelBuilder.Entity<T>();
Map.ToTable( typeof(T).Name );
typeof(T).Properties( Flags.Public | Flags.Instance )
.Where( p => p.PropertyType.IsEnum )
.ForEach( p => Map.Ignore( e => p ) );
}
}
Выполнение вышеизложенного дает мне следующую ошибку:
System.InvalidOperationException:
The expression 'e => value(Domain.AbstractMappingProvider`1+<>c__DisplayClass3[Domain.User]).p' is not a valid property expression.
It must be of the form 'e => e.Property'.
Как я могу использовать "p" (который на самом деле является свойством "e"), чтобы это не только компилировалось, но и работало? : о)
Я надеюсь, что у кого-то есть хитрый трюк, чтобы решить это. Альтернативные решения приветствуются, но помните, что вся идея состоит в том, чтобы не вызывать Map.Ignore для каждого свойства перечисления.