EF Core Entity по типу - PullRequest
       5

EF Core Entity по типу

0 голосов
/ 13 февраля 2019

Я пытаюсь динамически отображать объекты в EF Core.Поэтому вместо того, чтобы указывать множественные отношения явно в dbcontext, я пытаюсь сделать это с помощью отражения.Итак, у меня пока есть это:

var props = modelBuilder.Model.GetEntityTypes()
            .SelectMany(t => t.GetProperties())
            .Where(p => p.IsForeignKey());

foreach (var prop in props)
{
    var name = prop.Name.Split(new[] { "Id" }, StringSplitOptions.None)[0];

    var parentTableType = prop.DeclaringEntityType.ClrType
        .GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
        .Where(f => f.FieldType != typeof(long))
        .First(f => f.Name.Contains(name))
        .FieldType;

    var childTableType = prop.DeclaringEntityType.ClrType
        .GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
        .Where(f => f.FieldType == typeof(long))
        .First(f => f.Name.Contains("Id"))
        .DeclaringType;
}

Так что это работает, как я ожидаю, я получаю Type каждой из таблиц.Теперь проблема приходит, когда я пытаюсь создать отношения.Type из этих двух таблиц, очевидно, являются переменными, поэтому я не могу использовать их как явные Type, как указано ниже:

modelBuilder.Entity<parentTableType>()
    .HasMany<childTableType>();

Есть ли способ преобразовать переменные в конкретные типы во время выполнения дляпозвольте вышеупомянутому случиться, или я трачу свое время, пытаясь сделать это?

1 Ответ

0 голосов
/ 13 февраля 2019

Существует множество Fluent API неуниверсальных перегрузок метода, принимающих string имя типа или Type аргументы типа.

Поскольку у вас есть Type переменные, вы можете использовать соответствующиеEntity и HasMany перегрузки:

modelBuilder.Entity(parentTableType)
    .HasMany(childTableType);  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...