Entity Framework Database Firstを介してエンティティを生成し、そのような関数を使用したい場合:
AuditManager.DefaultConfiguration.Exclude<T>();
私がそれを呼び出す回数がエンティティの数と等しくなければならないと考えている
例:
AuditManager.DefaultConfiguration.Exclude<Employee>();
AuditManager.DefaultConfiguration.Exclude<Department>();
AuditManager.DefaultConfiguration.Exclude<Room>();
どのように選択した数のエンティティをループし、すべてをExclude
関数に渡すのですか?
明らかな解決策は、非表示にするエンティティタイプごとにメソッドを呼び出すことです。このような:
AuditManager.DefaultConfiguration.Exclude<Employee>();
AuditManager.DefaultConfiguration.Exclude<Department>();
AuditManager.DefaultConfiguration.Exclude<Room>();
(あなたは、条件文を追加することができif
それらの周りs)は、動的にそれを行うこと。
メタデータに基づいてExclude
メソッドを呼び出す、完全に柔軟なソリューションが必要な場合は、何かが必要です。このようなもの:
var types = new[] { typeof(Employee), typeof(Department), typeof(Room) };
var instance = AuditManager.DefaultConfiguration;
var openGenericMethod = instance.GetType().GetMethod("Exclude");
foreach (var @type in types)
{
var closedGenericMethod = openGenericMethod.MakeGenericMethod(@type);
closedGenericMethod.Invoke(instance, null);
}
これは、 Exclude<T>
メソッドが、 DefaultConfiguration
指すインスタンスのインスタンスメソッドであることを前提としています。
エンティティタイプをループする代わりに、監査したくないエンティティを同じインターフェイスに実装して除外することもできます。例えば:
public interface IExcludeFromAudit
{ }
あなたのエンティティ:
public class Order : IExcludeFromAudit
{
//snip
}
そして今、インターフェイスを除外します:
AuditManager.DefaultConfiguration.Exclude<IExcludeFromAudit>();
これの利点は、除外されるものを簡単に制御できるようになったことです。