Я действительно не могу понять это ...
Я пытаюсь добиться следующего результата с помощью отражения:
_builder.Entity<Post>().HasKey(p => p.Id);
Позвольте мне представить переменные ... _builder
имеет тип DbModelBuilder
, а Post
имеет свойство Id
типа Guid
.
В приведенном ниже коде contentType
переносит System.Type
:
var config = _builder.GetType()
.GetMethod("Entity")
.MakeGenericMethod(contentType.Type)
.Invoke(_builder, null);
var hasKey = config.GetType().GetMethod("HasKey");
var expressionKey = typeof(Expression<>)
.MakeGenericType(typeof(Func<,>)
.MakeGenericType(contentType.Type, typeof(Guid)));
var paramEx = Expression.Parameter(contentType.Type, "t");
var lambdaEx = Expression.Lambda(Expression.Property(paramEx, "Id"), paramEx);
hasKey.MakeGenericMethod(typeof(Guid))
.Invoke(_builder, new[] { lambdaEx });
HasKey
определение может помочь:
public EntityTypeConfiguration<TEntityType> HasKey<TKey>(Expression<Func<TEntityType, TKey>> keyExpression);
... где TEntityType
должно быть типа Post
и TKey
типа Guid
...
Выдается исключение типа TargetException
(при последнем вызове Invoke выше):
Объект не соответствует типу цели.
Я испробовал каждую идею, которую смог придумать, и все равно не могу соответствовать типу цели.
Любая помощь приветствуется.