2016-12-05 24 views
0

私は2つのモデルクラスがあります:私は、私は次のエラーを取得するアプリケーションを実行しようとするたびにEntity Frameworkの:外部キー

public class Nurse 
{ 
    public int Id { get; set; } 

    [Required] 
    public string FirstName { get; set; } 

    [Required] 
    public string Surname { get; set; } 

    [Required] 
    public string AddressLine1 { get; set; } 
    [Required] 
    public string AddressLine2 { get; set; } 
    public string AddressLine3 { get; set; } 
    public string AddressLine4 { get; set; } 

    [Required] 
    [EmailAddress] 
    public string EmailAddress { get; set; } 

    [Required] 
    [Phone] 
    public string ContactNumber { get; set; } 

    [Required] 
    public DateTime DateOfBirth { get; set; } 

    [Required] 
    public DateTime RegistrationDate { get; set; } 


    //Foreign Keys 

    public int PaymentId { get; set; } 
    [ForeignKey("PaymentId")] 
    public virtual Payment Payment { get; set; } 


    public int BranchId { get; set; } 
    [Required] 
    [ForeignKey("BranchId")] 
    public virtual Branch Branch { get; set; } 
} // Cls 

public class Payment 
{ 
    public int Id { get; set; } 

    //Type of String instead of to allow for starting zeros 
    [RegularExpression("^[0-9]+$")] 
    public string SortCode { get; set; } 

    [RegularExpression("^[0-9]+$")] 
    public string BankAccountNumber { get; set; } 

    [RegularExpression("^[0-9]+$")] 
    public string ChequeNumber { get; set; } 

    public DateTime DateReceived { get; set; } 

    public string Notes { get; set; } 

    //Foreign Keys 
    public int PaymentTypeId { get; set; } 
    [Required] 
    [ForeignKey("PaymentTypeId")] 
    public PaymentType PaymentType { get; set; } 

    public int NurseId { get; set; } 
    [Required] 
    [ForeignKey("NurseId")] 
    public Nurse Nurse { get; set; } 
} // Cls 

を:

Exception thrown: 'System.InvalidOperationException' in EntityFramework.dll

Additional information: The ForeignKeyAttribute on property 'Payment' on type 'PNA_Model.Nurse' is not valid. The foreign key name 'PaymentId' was not found on the dependent type 'PNA_Model.Payment'. The Name value should be a comma separated list of foreign key property names.

各支払いは看護師に属するが、すべての看護師が支払いを受けるわけではない。

Paymentの 'Id'プロパティを 'PaymentId'に変更すると、エラーが消えてしまいます。エラーメッセージに応じてどのような意味があるのでしょうか。

しかし、私はEFがこれを理解するのに十分にスマートであると思っていました。他のクラスとその 'Id'プロパティと同様の状況があり、エラーメッセージが表示されません。

アイデア?

ありがとうございました

+0

'ForeignKeyAttribute'を' Payment'の代わりに 'PaymentId'に追加しようとしましたか? – Mats391

+1

EFのどのバージョンを使用していますか? EF6、EFコア? – krillgar

+0

@krillgarバージョン= 6.0.0.0、App.configファイルに従って – Shanie

答えて

0

OK、私は間違っていたことを発見したと思います。

まず、Entity Frameworkでは、1対1の関係では、従属(支払)の主キーも外部キーである必要があります。

したがって、PaymentクラスではKey(Payment.Id)がNurseのForeign Keyであり、したがってNurse Keyと等しくなるため、 'PaymentId'プロパティは不要です。 Nurse.Id)。 Paymentsクラスでは、Key/ForeignKeyで処理されるため、 'NurseId'プロパティを削除する必要があります

残りの2つの方法で残りの作業を実行できます。お支払いクラスの

  1. - キー(Payment.Id)の 使用データ注釈PaymentConfigクラスで

    [ForeignKey("Nurse")] 
    public int Id { get; set; } 
    
  2. -

    HasRequired(p => p.Nurse) 
        .WithOptional(n => n.Payment); 
    

第二オプションがあるかもしれませんあなたも指定したい方が良い場合

WillCascadeOnDelete(false) 

お手数をおかけしていただきありがとうございます。

関連する問題