Как сделать уникальный ключ двумя способами в EF Core? - PullRequest
1 голос
/ 06 апреля 2020

У меня есть таблица

class Sample {
  public string From;
  public string To;
}

Я хочу убедиться, что From и Two уникальны для всех

Значение, если From = 2 и To = 1. Не может быть комбинация 1,2 или 2,1 в таблице

Спасибо

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

В базу данных добавьте проверочное ограничение, что From

И в дополнение к предотвращению (1,2), (2,1) этот дизайн дает вам простой способ найти пару, как вы знаете, что он будет храниться как (1,2), а не (2,1).

0 голосов
/ 06 апреля 2020

Вам нужно будет использовать определения модели, в вашем контексте вам нужно добавить

modelBuilder
    .Entity<Sample>()
    .HasIndex(u => new { u.From, u.To })
        .IsUnique();

Затем индекс будет добавлен.

Проверка Entity Framework Core add уникальный код ограничения first

Очень похоже, но только для одного поля.

Edit

Если вам нужна пара уникальных, то объедините его с другим ответом, добавьте поле в таблице с упорядоченной комбинацией,

class Sample {
  public string From;
  public string To;
  public string Both;
}

Затем установите значение обоих упорядоченных значений:

var list = new List<string>
{
    sample.From, sample.To
}
    .OrderBy(x => x)
    .ToList();
sample.Both = string.Join(":", list);
}

Таким образом, уникальное ограничение против комбинации обоих, по порядку, поэтому не имеет значения, что они вставили в from и в to

0 голосов
/ 06 апреля 2020

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

Как вы должны сгенерировать этот третий столбец, чтобы он был одинаковым как для (From, To) = (1,2), так и (2,1)? Предполагая, что имя третьего столбца равно Оба , вы можете использовать приведенный ниже алгоритм basi c.

class Sample {
  public string From;
  public string To;
  public string Both;
}

Алгоритм:

if(From.ComareTo(To) >= 0) {
   Both = To + From;
} else {
   Both = From + To;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...