0

我試圖做到以下幾點:如何使用實體框架代碼優先設置唯一約束?

應用程序類: 添加名爲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; } 
+0

發生這種情況時,我通過Configuration.cs複製文件的地方(如果有的話是在它),然後我: 1.刪除遷移文件夾 2.重使用'enable-migrations'命令啓用遷移。 3.您現在應該能夠重新運行'add-migration *'並查看您在這些方法中所做的更改。 –

+0

@IanGesner我的遷移工作,因爲我可以在另一個桌子上做一個不同的唯一但它不是像這樣的虛擬。 – Bowie

+0

「以確保沒有人能夠多次申請相同的帖子」 - 什麼是帖子?每個應用程序只能有一個申請人,所以你需要這個FK是獨一無二的嗎?如果是這樣,任何申請人只能申請一次* *。 –

回答

0

我不知道這樣做與數據註釋,但你可以試試這個。

在你的DbContext類:

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