2016-10-17 20 views
0

人はすべてのユーザーを含むユーザーモデルです。変更モデルにはEngineerIdとManagerIdが含まれ、どちらもPerson IDです。なぜこのエラーが発生するのですか?外部キーの複合外部キーの順序を決定できません。

ProjectName.Models.Change型の外部キーの複合外部キーの順序を判断できません。複合外部キー・プロパティーでForeignKeyデータ注釈を使用するときは、Columnデータ注釈またはFluent APIを使用して順序を指定してください。

public class Change 
{ 
    [Key] 
    public int ChangeId { get; set; } 

    [Required(ErrorMessage = "Change description is required.")] 
    [Display(Name = "Change Description")] 
    [DataType(DataType.MultilineText)] 
    public string ChangeDescription { get; set; } 

    [Required(ErrorMessage = "Change date is required.")] 
    [Display(Name = "Date of Change")] 
    [DataType(DataType.Date)] 
    public DateTime ChangeDate { get; set; } 

    [Required(ErrorMessage = "Time is required.")] 
    [Display(Name = "Time of Change")] 
    [DataType(DataType.Time)] 
    public DateTime ChangeTime { get; set; } 

    [Required(ErrorMessage = "Engineer name is required.")] 
    [Display(Name = "Engineer")] 
    [ForeignKey("person")] 
    public int EngineerId { get; set; } 

    [Required(ErrorMessage = "Status is required.")] 
    [Display(Name = "Status")] 
    public int StatusId { get; set; } 

    [Required(ErrorMessage = "Manager is required.")] 
    [Display(Name = "Manager")] 
    [ForeignKey("person")] 
    public int ManagerId { get; set; } 

    [Required(ErrorMessage = "System is required.")] 
    [Display(Name = "System")]   
    public int SystemDetailId { get; set; } 

    public virtual Person person { get; set; } 
    public virtual Status status { get; set; } 
    public virtual SystemDetail systemdetail { get; set; } 
} 
+0

@CodeCasterここに問題があると思いますが、OPはありません**コンポジットFKは必要ありません。それを再開してもよろしいですか? –

+0

@CodeCasterはいこれは私が '[Key、Column(Order = index)]'を参照していたことです - おねえさん – inan

+0

@Nathan McKaskle複合FKが不要であることを確認してください。 –

答えて

6

あなたは1と同じナビゲーションプロパティ(person)と(ForeignKey属性を経由して)関連付けられている2つの外部キープロパティ(EngineerIdManagerId)を持っています。このようにして、EFは複合キーを形成すると考えています。

あなたが意図しているのは2つの関係であるため、それぞれの外部キーを別のナビゲーションプロパティに関連付ける必要があります。

public class Change 
{ 
    // ... 

    [Required(ErrorMessage = "Engineer name is required.")] 
    [Display(Name = "Engineer")] 
    [ForeignKey("Engineer")] 
    public int EngineerId { get; set; } 

    [Required(ErrorMessage = "Manager is required.")] 
    [Display(Name = "Manager")] 
    [ForeignKey("Manager")] 
    public int ManagerId { get; set; } 

    // instead of person property: 
    public virtual Person Engineer { get; set; } 
    public virtual Person Manager { get; set; } 
} 
+0

ありがとう、これは私が探していた現代的な答えです。 –