Как установить уникальное ограничение с помощью Entity Framework Code First?

Я пытаюсь сделать следующее:

В классе приложения: добавьте ограничение UNIQUE с именем IX_Unique_Applicatation в качестве бизнес-правила, чтобы убедиться, что никто не может применять к одной и той же публикации более одного раза.

Я пытаюсь применить это к

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

namespace solution_MVC_HR.Models
{
    public class Application
    {
        public int ID { get; set; }

        [Display(Name = "Covering Comments")]
        [Required(ErrorMessage = "You cannot leave the summary comments blank.")]
        [StringLength(2000,ErrorMessage ="Summary must be between 20 and 2000 characters",MinimumLength =20)]
        [DataType(DataType.MultilineText)]
        public string Comments { get; set; }

        [Required(ErrorMessage ="You must specify the job posting applied for.")]
        public int PostingID { get; set; }

        public virtual Posting Posting { get; set; }

        [Required(ErrorMessage = "You must specify the applicant applying to the job posting.")]
        public int ApplicantID { get; set; }

        [Index(IsUnique = true)]
        public virtual Applicant Applicant { get; set; }

    }
}

Когда я добавляю миграцию IX_Unique_Applicatation, я получаю:

public partial class IX_Unique_Applicatation : DbMigration
    {
        public override void Up()
        {
        }

        public override void Down()
        {
        }
    }

Это абсолютно пусто (очевидно, должно быть что-то в пустоте вверх и вниз) Я пробовал это на нескольких разных полях... Я не вижу, где я иду не так, и был бы очень признателен за помощь.

редактировать: я пытался такого рода кодирования с этим, давая мне ошибку о моем уникальном в поле идентификатора?

[Index("IX_MyTwoColumns", 1, IsUnique = true)]
public int UserAttributeId { get; set; }
[ForeignKey("UserAttributeId")]
public virtual UserAttribute UserAttribute { get; set; }

1 ответ

Я не знаю, как это сделать с аннотациями данных, но вы можете попробовать это.

В вашем классе DbContext:

 protected override void OnModelCreating(ModelBuilder builder)
 {
       builder.Entity<Application>()
            .HasIndex(a => a.Applicant)
            .IsUnique();
 }
Другие вопросы по тегам