private static void ProcessTable(ModelBuilder modelBuilder, PropertyInfo contextMember)
{
Type tableType = contextMember.PropertyType.GetGenericArguments()[0];
PropertyInfo[] members2 = tableType.GetProperties();
foreach (var m in members2)
{
object[] attrs = m.GetCustomAttributes(typeof(KeyAttribute), true);
if (attrs.Length < 1) continue; // FIXME: should be 2
// Сейчас сделаем вызов вроде
// modelBuilder.Entity<ShowTable>().HasKey(vf => new {vf.ID});
MethodInfo mi = typeof(ModelBuilder).GetMethod("Entity", new Type[]{});
MethodInfo miConstructed = mi.MakeGenericMethod(tableType);
var entityTypeBuilder = /*(EntityTypeBuilder<[tableType]>)*/miConstructed.Invoke(modelBuilder, new object[]{});
Type EntityTypeBuilderType = typeof(EntityTypeBuilder<>).MakeGenericType(new[]{tableType});
MethodInfo mi2 = typeof(ModelBuilder).GetMethod("HasKey");
var tableParam = Expression.Parameter(tableType, "table");
IEnumerable<Expression> keys1 =
from a in members2 select Expression.Property(tableParam, a.Name);
System.Linq.Expressions.NewArrayExpression newArrayExpression =
System.Linq.Expressions.Expression.NewArrayInit(typeof(object), keys1);
// (dynamic t) => keys;
var myDelegate = Expression.Lambda<Func<dynamic, object>>(
newArrayExpression,
new ParameterExpression[] { tableParam });
mi2.Invoke(entityTypeBuilder, new[]{myDelegate});
}
}
Last active
September 17, 2019 15:06
-
-
Save vporton/3822ab42bee3894f5dd31de5aa9c065c to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment