如何使用Entity Framework Code First设置唯一约束?

时间:2017-09-30 02:23:54

标签: asp.net-mvc entity-framework entity-framework-6 entity-framework-5

我正在尝试执行以下操作:

在应用程序类中: 添加名为IX_Unique_Applicatation的UNIQUE约束作为业务规则 确保没有人可以多次申请同一个帖子。

我正在尝试将其应用于

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()
        {
        }
    }

它完全是空白的(显然应该有空虚的东西和虚空我已经尝试了几个不同的领域..我不知道我哪里出错了,非常感谢帮助。

编辑:我尝试过这种编码,但是在ID字段上给我一个关于我的唯一身份的错误?

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

1 个答案:

答案 0 :(得分:0)

我不知道用数据注释做这件事,但你可以试试这个。

在您的DbContext类中:

 protected override void OnModelCreating(ModelBuilder builder)
 {
       builder.Entity<Application>()
            .HasIndex(a => a.Applicant)
            .IsUnique();
 }