EF Core HasKey () против HasIndex (). IsUnique () во многих соединительных таблицах - что лучше и почему? - PullRequest
0 голосов
/ 14 января 2020

У меня есть две сущности со многими отношениями. Мне нужно знать, какой индекс будет лучше для его таблицы соединений. Давайте рассмотрим пример classi c,

Объекты:

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public List<PostTag> PostTags { get; set; }
}

public class Tag
{
    public int TagId { get; set; }

    public List<PostTag> PostTags { get; set; }
}

public class PostTag
{
    public int PostId { get; set; }
    public Post Post { get; set; }

    public int TagId { get; set; }
    public Tag Tag { get; set; }
}

Вот PostTag Конфигурация

modelBuilder.Entity<PostTag>().HasKey(t => new { t.PostId, t.TagId });

Это создает IX_PostTag_TagId (Non-Unique,Non-Clustered) и PK_PostTag (Clustered) в sql server.

Все записи в этой соединительной таблице будут уникальными. Поэтому изменение вышеуказанной конфигурации, как показано ниже, будет иметь смысл, и это целесообразно?

modelBuilder.Entity<PostTag>().HasIndex(t => new { t.PostId, t.TagId }).IsUnique();

Пожалуйста, помогите.

...