Entity Framework (Core), уникальные «составные столбцы», которые не являются ключевыми - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть следующий класс

public Building()
{
   public int Id{Get; Set;};
   public ICollection Bars{Get; Set;};
}

public Room()
{
   public int Id{Get; Set;};

   public int BuildingId{Get; Set;};
   public Building Building{Get; Set;}; 

   public string Name{Get; Set;); 
}

Я бы хотел, чтобы каждая комната в здании имела уникальное имя.Но я не могу сделать свойство Name уникальным, так как разные здания могут иметь одно и то же имя комнаты

Room Table
Id    BuildingId    Name
1     1             Kitchen   
2     2             Kitchen    //Should be allowed as different building
3     1             Kitchen    //Should not be allowed

Единственное решение, которое я могу придумать, - это создание составного ключа между BuildingId и Name.

modelBuilder.Entity<Room>().HasKey(r=> new {r.BuildingId, r.Name});

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

Я считаю, что мне нужно что-то сделать с индексами, но я могу найти рабочий пример того, что я после.

1 Ответ

0 голосов
/ 26 сентября 2018

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

modelBuilder.Entity<Room>(b =>
            {
                b.HasIndex(e => new { e.BuildingId, e.Name}).IsUnique();
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...