Я хочу динамически создать свою модель данных для работы с некоторыми существующими классами и настраиваемым файлом сопоставления XML, потому что у меня много существующих таблиц и множество существующих бизнес-классов (может быть, я сумасшедший, я не знаю).
Для свойств, которые используют разные имена столбцов или не соответствуют существующим столбцам, я хочу вызвать .Ignore () и .HasColumnName (), но я хочу сделать это двоично.
Итак, я хочу иметь возможность совершать подобные вызовы, но я хочу делать их динамически на основе отражения и XML-файла конфигурации с использованием Linq.Expressions (которым у меня никогда не было повода):
modelBuilder.Entity<Product>().Property(p => p.QuantityInStock).HasColumnName("UnitsInStock");
или
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]]'.