Entity Framework - Уникальное ограничение на строковый столбец - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в EF (6.2) и пытаюсь сгенерировать базу данных, используя первый подход кода.

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

Чтобы обеспечить уникальность, я добавил индекс, который указывает, что столбец должен быть уникальным:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Blog.Models
{
    public class User
    {
        [Key, Index, Required]
        public int Id { get; set; }

        [Index(IsUnique = true), Required]
        public string Name { get; set; }

        [Required]
        public string Password { get; set; }

        public ICollection<Comment> Comments { get; set; }
    }
}

Однако он жалуется, потому что я пытаюсь добавить индекс для столбца строкового типа, в то время как он принимает использование индекса для целочисленного столбца, такого как идентификатор строки.

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

Итак, мой вопрос : Почему я не могу добавить индекс для столбца строкового типа и как я могу обеспечить уникальность (уникальность?) Данного столбца? Спасибо.

1 Ответ

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

Как написано в Учебнике от MSDN, Indexes возможны на strings, как указано в следующем примере кода

public class User
    {
        public int UserId { get; set; }

        [Index(IsUnique = true)]
        [StringLength(200)]
        public string Username { get; set; }

        public string DisplayName { get; set; }
    }

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

Возможно, возникает конфликт, потому что вы используете Index без имени в Id, а также Index без имени в Name. Попробуйте определить имя для Index из Name. Я не уверен, что это работает, но стоит попробовать.

Дополнительную информацию можно найти здесь на веб-сайте MSDN .

...