Создать индекс для свойства навигации OwnesOne - PullRequest
1 голос
/ 04 ноября 2019

Давайте посмотрим на следующий пример:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Client Client { get; set; }
}

public class Client
{
    public int Id { get; set; }
    public string Name { get; set; }
}

У меня есть следующая часть конфигурации объекта:

builder.OwnsOne(x => x.Client, client =>
{
    client.Property(x => x.Id).IsRequired(false);
    client.Property(x => x.Name).IsRequired(false);
});

Если мы применим миграцию к БД, мы увидим одинтаблица Blogs со столбцом Client_Id.

Теперь я хочу создать индекс для этого столбца. Я добавил следующую строку в конфигурацию объекта.

builder.HasIndex(x => x.Client.Id);

И если вы пытаетесь создать миграцию, вы увидите следующую ошибку:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.ArgumentException: The properties expression 'x => Convert(x.Client.Id, Object)' is not valid.
The expression should represent a simple property access: 't => t.MyProperty'.
When specifying multiple properties use an anonymous type: 't => new { t.MyProperty1, t.MyProperty2 }'.

Возможно ли создатьиндекс с использованием конфигурации объекта?

1 Ответ

1 голос
/ 04 ноября 2019

Типы владения настраиваются отдельно для каждого типа владельца, используя свободный API строителей владения.

Вы можете создать индекс так же, как вы настраиваете свойства, например,

builder.OwnsOne(x => x.Client, client =>
{
    client.Property(x => x.Id).IsRequired(false);
    client.Property(x => x.Name).IsRequired(false);

    client.HasIndex(x => x.Id); // <--
});

Единственная потенциальная проблема может возникнуть, если вам нужно создать составной индекс с полями как от владельца, так и от собственного типа, которыйЯ считаю, что в настоящее время это невозможно (текущее ограничение EF Core).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...