0

私は次のことをやろうとしている:アプリケーションクラスでEntity Framework Code Firstを使用して一意制約を設定する方法は?

: 誰もが複数回同じ投稿に適用することはできないことを確認してください にビジネスルールとしてIX_Unique_Applicatationという名前の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; } 

    } 
} 

にこれを適用しようとしています:

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でコピー(何がそれであるならば)どこかにファイルを、その後、I: 1.移行フォルダに 2.再削除'enable-migrations'コマンドを使用して移行を有効にします。 3. 'add-migration *'を再実行して、それらの変更を確認することができます。 –

+0

@IanGesner My Migrationsは動作します。別のテーブルで異なるUniqueを実行することはできますが、これはVirtualのようなものではありません。 – Bowie

+0

"誰も同じ投稿に複数回応募できないようにする" - 投稿は何ですか?アプリケーションごとに応募者は1人しかいないので、このFKがユニークである必要がありますか?その場合、応募者は一度*適用可能です。 –

答えて

0

これはデータアノテーションではわかりませんが、これを試すことができます。あなたのDbContextクラスで

protected override void OnModelCreating(ModelBuilder builder) 
{ 
     builder.Entity<Application>() 
      .HasIndex(a => a.Applicant) 
      .IsUnique(); 
} 
関連する問題