いくつかの既存のクラスとカスタム XML マッピング ファイルを操作するデータ モデルを動的に作成したいと考えています。これは、既存のテーブルが多数あり、既存のビジネス クラスが多数あるためです (クレイジーかもしれませんが、わかりません)。
異なる列名を使用するか、既存の列に対応しないプロパティについては、.Ignore() と .HasColumnName() を呼び出したいのですが、動的に実行したいと考えています。
したがって、このような呼び出しを行うことができるようにしたいのですが、リフレクションと Linq.Expressions を使用した XML 構成ファイルに基づいて動的に呼び出しを行いたいです (これは使用する機会がありませんでした)。
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]]'.