Мне нужно добавить конфигурацию автоматического сопоставления в 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
, он показывает мне эту ошибку:
В последовательности нет соответствующих элементов
В чем проблема?как я могу решить эту проблему?