4

Во-первых, я новичок в MVC.Как создать уникальное ограничение для поля строки типа в EF 6?

У меня есть таблица Project, в которой есть поля ProjectID, ProjectNumber и ProjectDescription. ProjectId является entityKey типа int, ProjectNumber должен быть уникальным ограничением.

Как это сделать в инфраструктуре сущности 6.1.3?

в моем классе проекта у меня есть

 public int ProjectID { get; set; } 
     [Index(IsUnique = true)] 
     [StringLength(200)] 
     public string ProjectNumber { get; set; } 
     public string ProjectDescription { get; set; } 

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

что я делаю неправильно?

+0

Просто убедитесь, что у вас есть ссылка на это пространство имен: 'using System.ComponentModel.DataAnnotations.Schema;' right? Также попробуйте добавить атрибут maxlength, чтобы увидеть, имеет ли значение значение: '[MaxLength (200)]' –

+0

да, у меня есть ссылка на пространство имен System.ComponentModel.DataAnnotations.Schema. Я внес изменения в '[Index (IsUnique = true)] [MaxLength (200)] public string ProjectNumber {get; задавать; } 'после того, как я сделал изменение, я сохранил класс, затем я иду дизайнером модели и создаю базу данных из модели? – user3726459

+0

Да, попробуйте '[MaxLength (200)]' вместо '[StringLength (200)]', или если это не сработает, попробуйте оба из них. Сервер должен знать, что существует ограничение на количество символов перед добавлением уникального ограничения. –

ответ

2

На основании ответа в Entity Framework code first unique column

Попробуйте этот код:

public int ProjectID { get; set; } 
[Index("ProjectNumber_Index", IsUnique = true)] 
[MaxLength(200)] 
public string ProjectNumber { get; set; } 
public string ProjectDescription { get; set; } 

И убедитесь, что строка не установлена ​​в NVARCHAR (MAX) в вашем SQL Server, или вы увидите сообщение об ошибке с Entity Сначала рамочный код.

+0

он не работает для меня. Все поля - nvarchar (50). Entkey является int. Я не уверен, чего у меня нет, или что я точно делаю неправильно. Что должно произойти, когда я вставляю запись с уже существующим ProjectNumber? – user3726459

+0

Предполагается предоставить вам исключение DbUpdateException со следующим сообщением: 'Невозможно вставить дублируемую строку ключа в объект 'db.Project' с уникальным индексом 'Index'. Значение повторяющегося ключа (...). Заявление было прервано. ' –

+0

Если мой ответ по-прежнему вам не поможет, я боюсь, вам придется подождать, когда кто-то более опытный, чем я, чтобы ответить на него. Я прошу прощения за то. –