Автоматизация настройки отображений с помощью отражения - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужно добавить конфигурацию автоматического сопоставления в DBModelBuilder в C #.

Я создаю это сопоставление:

 public class ProductMapping : EntityTypeConfiguration<Product>
{
    public ProductMapping(DbModelBuilder builder)
    {
        HasRequired(x => x.ProductUnit).WithMany(x => x.Products).HasForeignKey(x => x.UnitId);
    }
}

 public class TransactionMapping : EntityTypeConfiguration<Transaction>
{
    public TransactionMapping()
    {
        HasRequired(x => x.Product).WithMany(x => x.Transactions).HasForeignKey(x => x.ProductId);
        HasRequired(x => x.Contractor).WithMany(x => x.Transactions).HasForeignKey(x => x.ContractorId);
    }
}

и использую Создать это extention Method, чтобы найти все сопоставления и настройкиЭто в DbModelBuilder:

        public static void RegisterEntityTypeConfiguration(this DbModelBuilder modelBuilder, params Assembly[] assemblies)
    {
        MethodInfo applyGenericMethod = typeof(DbModelBuilder).GetMethods().First(m => m.Name == nameof(DbModelBuilder.Configurations.Add));

        IEnumerable<Type> types = assemblies.SelectMany(a => a.GetExportedTypes())
            .Where(c => c.IsClass && !c.IsAbstract && c.IsPublic);

        foreach (Type type in types)
        {
            foreach (Type iface in type.GetInterfaces())
            {
                if (iface.IsConstructedGenericType && iface.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>))
                {
                    MethodInfo applyConcreteMethod = applyGenericMethod.MakeGenericMethod(iface.GenericTypeArguments[0]);
                    applyConcreteMethod.Invoke(modelBuilder, new object[] { Activator.CreateInstance(type) });
                }
            }
        }
    }

, и я использую это в конструкторе моделей:

            var asseblyconfiguration = typeof(EntityTypeConfiguration<>).Assembly;
        modelBuilder.RegisterEntityTypeConfiguration(asseblyconfiguration);

, но когда я использую Enable-Migrations, он показывает мне эту ошибку:

В последовательности нет соответствующих элементов

В чем проблема?как я могу решить эту проблему?

...