В моем методе OnModelCreating
для моего контекста данных я в настоящее время вручную отображаю все классы отображения конфигурации моих сущностей вручную, например:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserMap());
// 20 or so mapping configuration below
}
Я хочу упростить это с помощью отражения, поэтому у меня есть следующий код:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Find all EntityTypeConfiguration classes in the assembly
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
foreach (Type t in asm.GetTypes())
if (t.IsDerivedFromOpenGenericType(typeof(EntityTypeConfiguration<>)))
modelBuilder.Configurations.Add(Activator.CreateInstance(t));
}
IsDerivedFromOpenGenericType
от этого вопроса и работает правильно.
Проблема в том, что это не компилируется, потому что Activator.CreateInstance(t)
возвращает object
, но построитель модели ожидает System.Data.Entity.ModelConfiguration.ComplexTypeConfiguration<TComplexType>
.
Обычно при использовании класса Activator
я просто приводил бы объект к тому, что, как я ожидаю, будет иметь тип t
(или то, что я ожидаю от класса), но так как он использует обобщенные элементы, я не знаю, способа сделать это.
У кого-нибудь есть идеи?