Я хочу динамически создать свою модель данных для работы с некоторыми существующими классами и настраиваемым файлом сопоставления XML, потому что у меня много существующих таблиц и много существующих бизнес-классов (может быть, безумие, я не знаю).
Для свойств, которые используют другие имена столбцов или не соответствуют существующим столбцам, я хочу вызвать .Ignore() и .HasColumnName(), но я хочу сделать это динамически.
Итак, я хочу иметь возможность делать такие вызовы, но я хочу делать их динамически на основе отражения и файла конфигурации XML с использованием Linq.Expressions (который мне никогда не приходилось использовать):
modelBuilder.Entity<Product>().Property(p => p.QuantityInStock).HasColumnName("UnitsInStock");
or
modelBuilder.Entity<Product>().Ignore(p => p.QuantityInStock);
Это то, что я пытаюсь (в конечном итоге я буду ссылаться на свою карту XML, чтобы определить, какие свойства отображать, а какие игнорировать):
Type entityType = typeof(Product);
var config = modelBuilder.GetType().GetMethod("Entity")
.MakeGenericMethod(entityType)
.Invoke(modelBuilder, null);
var ignore = config.GetType().GetMethod("Ignore").MakeGenericMethod(entityType);
var paramEx = Expression.Parameter(entityType);
var lambdaEx = Expression.Lambda(Expression.Property(paramEx, "QuantityInStock"), paramEx);
ignore.Invoke(config, new[] { lambdaEx });
Но мое лямбда-выражение неверно:
Object of type 'System.Linq.Expressions.Expression`1[System.Func`2[ConsoleApplication2.Product,System.Int16]]'
cannot be converted to type
'System.Linq.Expressions.Expression`1[System.Func`2[ConsoleApplication2.Product,ConsoleApplication2.Product]]'.